django view

当请求一个页面时,Django 创建一个包含有关请求数据的 HttpRequest 对象,并将它作为第一个参数传给视图函数,每个视图函数处理完相应逻辑后返回一个 HttpResponse 对象,HttpRequest 和 HttpResponse 都被定义于 django.http 模块中。

HttpRequest 对象包含当前用户、使用的浏览器、当前请求 URL 的一些信息等。

属性 类型 说明
HttpRequest.body   str  
HttpRequest.path str 除域名以外的请求路径,以正斜杠开头  
HttpRequest.path_info str 在某些WEB服务器配置的URL,在主机名之后的部分被分成脚本前缀和路径信息两部分,而 path_info 就是表示路径信息部分的。(脚本前缀可以在WEB服务器中设置)
HttpRequest.method str HTTP请求的方式,值为 'GET' 或 'POST'
HttpRequest.encoding    
HttpRequest.GET django.http.QueryDict (dict 的子类) 键可重复,相当于c++的 multimap
HttpRequest.POST django.http.QueryDict 键可重复,相当于c++的 multimap
HttpRequest.REQUEST django.http.QueryDict 可以替代 HttpRequest.GET 和 HttpRequest.POST 的使用,不需要分清是GET还是POST即可获取数据,推荐使用。
HttpRequest.COOKIES dict 键值都是 str
HttpRequest.FILES 类 dict 包含所有上传文件。键是 <input type='file' name=""> 中name,值是一个 UploadedFile 对象。
HttpRequest.META dict 包含所有本次HTTP请求的 Header 信息,如用户IP和浏览器信息等。
HttpRequest.user AUTH_USER_MODEL 必须安装了 AuthenticationMiddleware 才可用
HttpRequest.session 类 dict 可读可写,表示当前会话,仅当 django 安装了 session 支持时可用
HttpRequest.urlconf    
HttpRequest.resolver_match    

 

def search(request):
    errors = []
    if request.REQUEST.get('uid'):
        return render_to_response('result.html',{'query':request.REQUEST.get('uid')})
    elif 'uid' in request.REQUEST:
        errors.append('uid is null')
        return render_to_response('search.html',{'errors':errors})
    else:
        return render_to_response('search.html',{'errors':errors})

 

应每次都给成功的GET 或 POST 请求(如果会改动数据库中数据的话)做重定向,这就是web开发的最佳实践。

django 自带一个 form 库,称为 django.forms,它可以进行表单显示、表单验证、当验证失败时重新显示表单、将表单数据转化成相关python类型:

#coding:utf-8
from django import forms

from django.conf import settings
settings.configure()

class MyForm(forms.Form):
    uid = forms.IntegerField(required=True)
    name = forms.CharField(required=True,widget=forms.Textarea,label='姓名',max_length=10)
    def clean_uid(self):
        uid = self.cleaned_data['uid']
        if uid<0:
            raise forms.ValidationError('uid 不能为负数!')
        return uid

f = MyForm({'uid':-3,'name':'tianya'})

print '输出MyForm对象:%s' %f
print '绑定:%s' %f.is_bound
print '验证:%s' %f.is_valid()
print '错误:%s' %f.errors
print 'uid字段的错误:%s' %f['uid'].errors
print '整理后的可用数据:%s' %f.cleaned_data

如果要复用 django 中定义好的 model ,可以使用 ModelForm,以避免重复模型描述。

 

 

 

 

posted @ 2014-02-26 11:25  轻典  阅读(3332)  评论(0编辑  收藏  举报