Django学习笔记第4、5记

来源:互联网 发布:mbd.baidu.com短域名 编辑:程序博客网 时间:2024/06/03 16:56
一、表单
1、request
request包含一些属性和方法:request.path,.get_host()等等
request.META中包含了本次HTTP请求的Header信息,常用的键值包括:HTTP_REFERER,HTTP_USER_AGENT,REMOTE_ADDR
使用如下例:
   def ua_display(request):
       ua=request.META.get('REMOTE_ADDR','unknown')
       return HttpResponse("Your IP address is %s" % ua)
2、表单的属性
<form action="定义了目的文件的文件名"  method="get/post">
<input  type="text/radio/checkbox/submit"  name=".."  value="..">

3、数据提交
search_server.html:
<html>
<head>
    <title>search_server</title>
</head>
<body>
    <form action="/search/" method="get">
        <input type="text" name="q">
        <input type="submit" value="ipv4_server">
    </form>
</body>
</html>

views.py里:
from django.shortcuts import render_to_response
def search_server_form(request):
    return render_to_response('search_server.html')

urls.py里:
from rasp_test import views
urlpatterns = patterns('',
# ...
(r'^search_server_form/$', views.search_server_form),
# ...
)

4、数据查询
search_server.html中,form的action属性设为/search/,即返回到/search/页面,所以在urls.py中增加
(r'^search/$', views.search),
然后在views.py中增加search函数
from models import Ipv4Server as ipv4server

 def search(request):
     if 'q' in request.GET and request.GET['q']:
        q=request.GET['q']
        ipv4servers=ipv4server.objects.filter(type__icontains=q)
        return render_to_response('search_result.html',{'ipv4servers':ipv4se    rvers,'query':q})
    else:
        return render_to_response('search_server.html',{'error':True})

然后编写search_result.html
  1 <html>
  2 <head>
  3     <title>search_result</title>
  4 </head>
  5 <body>
  6     <p>You searched for :<strong>{{query}}</strong></p>
  7     {% if ipv4servers %}
  8     <ul>
  9         {% for ipv4server in ipv4servers %}
 10         <li>{{ipv4server.webdomain}}</li>
 11         {% endfor %}
 12     </ul>
 13     {% else %}
 14     <p>No ipv4servers matched your search criteria.</p>
 15     {% endif %}
 16 </body>
 17 </html>
在search_server.html中也进行修改
{% if error %}
    <p style="color:red;">please submit a search term.</p>
{% endif %}

5、简化
def search(request):
    error = False
    if 'q' in request.GET:
        q = request.GET['q']
        if not q:
            error = True
        else:
            ipv4servers = ipv4server.objects.filter(type__icontains=q)
            return render_to_response('search_results.html',{'ipv4servers': ipv4servers, 'query': q})
    return render_to_response('search_server.html',{'error': error})
省去了search_server_form()函数,在urls.py中也省去了相关url,单在/search/上进行操作,所以表单的action属性可删除。

6、Django的form框架(略)

二、高级URL配置
1、使用多个视图前缀
from django.conf.urls.defaults import *

urlpatterns = patterns('mysite.views',    //利用字符串技术将共同前缀提取出来
    (r'^hello/$', 'hello'),
    (r'^time/$', 'current_datetime'),
    (r'^time/plus/(\d{1,2})/$', 'hours_ahead'),
)
urlpatterns += patterns('weblog.views',
    (r'^tag/(\w+)/$', 'tag'),
)
2、传递额外的参数至视图函数中
# urls.py
from django.conf.urls.defaults import *
from mysite import views
urlpatterns = patterns('',
    (r'^(foo)/$', views.foobar_view),
    (r'^(bar)/$', views.foobar_view),
)
# views.py
from django.shortcuts import render_to_response
from mysite.models import MyModel
def foobar_view(request, url):
    m_list = MyModel.objects.filter(is_new=True)
    if url == 'foo':
        template_name = 'template1.html'
    elif url == 'bar':
        template_name = 'template2.html'
    return render_to_response(template_name, {'m_list': m_list})
0 0