HttpRequest对象
包含当前请求URL的一些信息:
request.path | 除域名以外的请求路径,以正斜杠开头 | "/hello/" |
request.get_host() | 主机名(比如,通常所说的域名) | "127.0.0.1:8000" or "www.example.com" |
request.get_full_path() | 请求路径,可能包含查询字符串 | "/hello/?print=true" |
request.is_secure() | 如果通过HTTPS访问,则此方法返回True, 否则返回False | True 或者 False |
request.META 是一个Python字典,包含了所有本次HTTP请求的Header信息,比如用户IP地址和用户Agent(通常是浏览器的名称和版本号)。
注意,因为 request.META 是一个普通的Python字典,因此当你试图访问一个不存在的键时,会触发一个KeyError异常。
# BAD! def ua_display_bad(request): ua = request.META['HTTP_USER_AGENT'] # Might raise KeyError! return HttpResponse("Your browser is %s" % ua)
# GOOD (VERSION 2) def ua_display_good2(request): ua = request.META.get('HTTP_USER_AGENT', 'unknown') return HttpResponse("Your browser is %s" % ua)
form对象
from django import forms class ContactForm(forms.Form): subject = forms.CharField() email = forms.EmailField(required=False) message = forms.CharField()
把form打印出来
from mblog.forms import BlogForm
print BlogForm(None,None)
clean_方法
Django的form系统自动寻找匹配的函数方法,该方法名称以clean_ 开头,并以字段名称结束。 如果有这样的方法,它将在校验时被调用。例如:
class EditBlogForm(forms.Form): content = forms.CharField(label = u"描述", max_length = settings.MAX_MBLOG_LENGTH, required=False) blog = forms.IntegerField(label = u"分享") album = forms.IntegerField(label = u"图片", required=False) flag = forms.IntegerField(label = u"标志", required=False) group = forms.IntegerField(label = u"小组", required=False)
将对应:
def clean_blog(self): blog_id = self.cleaned_data['blog'] blog = None try: blog = Message.objects.get(id=blog_id) except Message.DoesNotExist: raise forms.ValidationError(u"编辑的分享不存在") return blog
clean_blog() 方法将在blog 字段的默认校验逻辑执行之后被调用。因为字段数据已经被部分处理了,所以我们不必担心数据是否为空,直接从self.cleaned_data 中提取出来。
更多:http://djangobook.py3k.cn/2.0/chapter07/