Django day07 HttpRequest主要内容,forms模块处理表单

目录

1.HTTP 通信协议

2.HttpRequest

    1.HttpRequest介绍

    2.HttpRequest 中的主要内容

    3.获取请求提交的数据

3.使用forms模块处理表单

    3.在 模板中,解析 form 对象

    4.在视图中,通过forms.Form自动获取表单数据

练习代码:https://blog.csdn.net/zh__quan/article/details/82155617


1.HTTP 通信协议

    1.什么是HTTP
        HTTP:Hyper Text Transfer Protocol
             超级   文本 传输     协议

        作用:规范了数据是如何打包以及传递的
    2.请求消息
        由 请求起始行,请求消息头,请求主体

        请求主体:
            post和put两种提交方式会产生请求主体
    3.响应消息
        由 响应起始行,响应消息头,响应主体

2.HttpRequest

    1.HttpRequest介绍

        HttpRequest,在Django中是对请求对象的封装体现.会封装请求过程中所有的信息.
        在Django中,HttpRequest被封装成了request被自动传到了视图处理函数中.

    2.HttpRequest 中的主要内容

        1.request.scheme : 请求协议
        2.request.body : 请求主体
        3.request.path : 请求路径(资源具体路径)
        4.request.get_host() : 请求的主机地址 / 域名
        5.request.method : 获取请求方法
        6.request.GET : 封装了GET请求方式提交的数据
        7.request.POST : 封装了POST请求方式提交的数据
        8.request.COOKIES : 封装了cookie的数据
        9.request.META : 封装了请求的元数据
            request.META.HTTP_REFERER : 封装了请求的源地址

    3.获取请求提交的数据

        1.get 请求方式
            request.GET['名称']

          1.使用表单提交数据
            <form></form>
          2.通过超链接拼查询字符串
              <a href="地址?参数1=值1&参数2=值2"></a>
              此种方式,属于http标准

            Django中,通过url传递参数
             url(r'^01_test/(\d+)',test_views)
             此种方式,非http标准的,属于Django标准

        2.post 请求方式

            request.POST['名称']

            CSRF:Cross-Site Request Forgery
                跨站点伪装攻击

                解决方案:
                    1.取消 CSRF 的验证
                        删除 settings.py 中 MIDDLEWARE 中 CsrfViewMiddleware 中间件
                    2.开放验证权限,无须验证,直接进入
                        在视图处理函数之上增加一个装饰器
                        @csrf_protect
                    3.必须要通过验证后才可以请求
                        在模板中<form>下的第一行增加:
                        {% csrf_token %}

    4.Django中的表单处理

        表单页面的get 和 post 请求,是由同一个视图(views)去处理的

3.使用forms模块处理表单

    1.forms模块的作用
        通过forms模块,允许将表单与class相结合,允许通过class生成表单
    2.使用 forms 模块
        1.创建 forms.py 文件
        2.导入 forms
            from django import forms
        3.创建class,一个class对应成一个表单
            class LoginForm(forms.Form):
                pass
        4.在class中创建属性
            一个属性对应着一个表单控件
            (参考文档)

    3.在 模板中,解析 form 对象

        1.注意
            1.需要自定义 <form>
            2.需要自定义按钮 <input type="submit">
        2.处理方法
            在视图中创建 forms.Form 的对象,并发送到模板中
            ex:
                form = RemarkForm()
                return render(request,'xx.html',locals())
            1.手动解析
                在模板中:
                    {% for field in form %}
                        {{field}} : 表示的就是控件 
                        {{field.label}} : 表示的就是控件前的文本
                    {% endfor %}
            2.自动解析
                1.{{form.as_p}}
                    将form对象中的每个属性使用p标记包裹起来,再显示在网页上
                2.{{form.as_ul}}
                    将form对象中的每个属性使用li标记包裹起来,再显示在网页上
                    注意:必须手动提供 <ol></ol> 或 <ul></ul>
                3.{{form.as_table}}
                    将form对象中的每个属性使用tr标记包裹起来
                    注意:必须手动提供<table></table>
    
    练习:
        1.创建一个数据库 - day07
        2.在程序中创建一个 Models - Users
            uname - 用户名
            upwd - 密码
            uage - 年龄
            uemail - 邮箱
          同步回数据库,并通过后台管理的方式插入几条测试数据
        3.创建 forms.Form 类,表示登录的 form 
            需要 用户名,密码  两个控件(俩属性)
        4.将 form 放在模板中,解析成对应的控件
            自己提供<form>以及提交按钮
        5.点击提交按钮时,要验证用户名和密码的值是否正确

    4.在视图中,通过forms.Form自动获取表单数据

        1.通过 forms.Form 的构造,接收post数据
            form = XXXForm(request.POST)
        2.需要让 form 通过验证后,再取值
            form.is_valid()
                返回True:提交的数据已经通过验证,允许接收表单提交的数据
                返回False:提交的数据验证未通过,无法取值
        3.获取表单中的数据
            通过 form.cleaned_data (字典) 接收提交的数据

        作业:
            1.创建 RegisterForm,根据 Users 的属性,构建 RegisterForm 的属性
            2.在模板中,根据RegisterForm,创建表单控件
            3.提交数据时,再交给RegisterForm接收提交的数据,通过验证后,将数据插入到数据库中

练习代码:https://blog.csdn.net/zh__quan/article/details/82155617

猜你喜欢

转载自blog.csdn.net/zh__quan/article/details/82261182