zoukankan      html  css  js  c++  java
  • 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,以避免重复模型描述。

  • 相关阅读:
    c++ 异常处理(2)
    ajax跨域,这应该是最全的解决方案了
    浏览器Request Header和Response Header的内容
    devDependencies和dependencies的区别
    json对象按时间排序
    JavaScript里的循环方法总结
    json list数据递归生成树状层级JSON
    javaScript年份下拉列表框内容为当前年份及前后50年
    vue cli+axios踩坑记录+拦截器使用,代理跨域proxy
    使用vue2+Axios+Router 之后的总结以及遇到的一些坑
  • 原文地址:https://www.cnblogs.com/tianyajuanke/p/3568706.html
Copyright © 2011-2022 走看看