django request和form

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)

<tr><th><label for="id_content">描述:</label></th><td><input type="text" name="content" id="id_content" /></td></tr>
<tr><th><label for="id_tags">标签:</label></th><td><input type="text" name="tags" id="id_tags" /></td></tr>
<tr><th><label for="id_source_link">链接:</label></th><td><input type="text" name="source_link" id="id_source_link" /></td></tr>
<tr><th><label for="id_source_title">标题:</label></th><td><input type="text" name="source_title" id="id_source_title" /></td></tr>
<tr><th><label for="id_source">来源:</label></th><td><input type="text" name="source" id="id_source" /></td></tr>
<tr><th><label for="id_group">描述:</label></th><td><input type="text" name="group" id="id_group" /></td></tr>
<tr><th><label for="id_flag">标志:</label></th><td><input type="text" name="flag" id="id_flag" /></td></tr>
<tr><th><label for="id_image_src">抓取图片url:</label></th><td><input type="text" name="image_src" id="id_image_src" /></td></tr>
<tr><th><label for="id_photo_id">上传图片id:</label></th><td><input type="text" name="photo_id" id="id_photo_id" /></td></tr>
<tr><th><label for="id_album">图片:</label></th><td><input type="text" name="album" id="id_album" /></td></tr>
<tr><th><label for="id_syncpost">同步围脖标志:</label></th><td><input type="checkbox" name="syncpost" id="id_syncpost" /></td></tr>
<tr><th><label for="id_taobao_item">shopping:</label></th><td><input type="text" name="taobao_item" id="id_taobao_item" /></td></tr>

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/

猜你喜欢

转载自san-yun.iteye.com/blog/1541315
今日推荐