day09のDjangoの基礎、フォームのコンポーネントは、プログラムで何が起こるか明らかにする?校正データ、情報としてレンダリングタグ


*******************************    Forms组件   ***************************************************
Forms组件在程序中做了哪些事?
校验数据、渲染标签、展示信息
    Forms组件可以做的事情的详细步骤:
    1.用户请求数据的验证
    2.自动生成错误信息
    3.打包用户提交的正确信息
    4.如果其中有一个错误了,其他的正确,保留上次输入的内容,保证输入框中的数据不会清空
    5.自动创建input标签并可以设置样式

forms组件:
            前戏需求:
                1.写一个注册页面,获取用户输入的用户名和密码,
                数据提交到后端之后,后端需要对用户名和密码做校验,
                用户名里面不能含有 挺差的,其次密码不能小于3位,如果不符合,展示对应的错误信息。

        自己通过render的方式给前端页面渲染了对应的数据,实现了前戏需求,
        思路是:
            1.手动书写html代码获取用户输入
            2.将数据提交给后端做数据校验
            3.如果数据有错误,把错误信息返回到前端页面

        urls.py文件

        from app01 import views
        urlpatterns = [
            url(r'^admin/', admin.site.urls),
            url(r'^register/', views.register),

        ]


        views.py文件

        def register(request):
            message={'username':'','password':''}
            if request.method == 'POST':
                #注意请求的方式上必须要大写才可以
                username=request.POST.get('username')
                password=request.POST.get('password')
                if '挺差的' in username:
                    message['username']='不符合规范'
                if len(password) < 3:
                    message['password'] = '太短了不够长,给你退回去了'

            return render(request,'register.html',locals())



        register.html文件

        <form action="" method="post">
            <p>
                username:
                <input type="text" name="username">
                <span style="color:red">{{ message.username }}</span>
            </p>
            <p>
                password:
                <input type="text" name="password">
                <span style="color:red">{{ message.password }}</span>
            </p>
            <input type="submit">

        </form>

        上述的需求完成以后,但是漏洞比较多,
        最重要的两条如下:
            1.输入不规范以后,所有内容全部清空
            2.输入框中校验的敏感词汇比较多,需要定义一个列表,查看输入的内容是否在该列表中,查询速度慢


**************************************************************************************
forms组件完善上面的功能:
#使用forms组件,完成数据校验,展示错误信息
#使用forms组件的前提是,你需要提前写一个类
创建forms组件:
    from django import forms

    class MyForm(forms.Form):
            #username字段,最少三位,最多八位
        username=forms.CharField(max_length=8,min_length=3)
            #password字段,最少三位,最多八位
        password=forms.CharField(max_length=8,min_length=3)
            #email字段,必须是邮箱格式
        email=forms.EmailField()


    def index(request):
    '''  渲染标签:
    第一步,需要生成一个空的forms_obj,MyForm类的对象
    第二步,通过locals()和render方法渲染到前端index页面
    '''
    forms_obj = MyForm()
    # 后端如何校验前端用户传入的数据
    if request.method == 'POST':

        #获取用户的数据,request.POST正好是一个字典,
        #request.POST作为该类的参数传入MyForm()类中,
        #然后再交给Forms组件来校验数据
        #注意事项,这两个forms_obj对象必须要书写一致
        forms_obj=MyForm(request.POST)
        if forms_obj.is_valid():
            print(forms_obj.cleaned_data)   #打印成功的数据
            return HttpResponse('数据全部OK')

        else:
            print(forms_obj.errors)     #打印错误的数据

    '''
    获取用户的数据 request.POST正好是一个字典
    检验数据神6条中的第二条:
        2.给写好的类,传字典数据(代校验的数据,生成一个代校验对象)
        form_obj=views.MyForm({'username':'jason','password':123,'email':'123@'})

    '''


    # for forms in forms_obj:
    #     print('我是',forms)
    '''
    forms 相关打印结果:
    我是 < input
    type = "text"
    name = "username"
    maxlength = "8"
    minlength = "3"
    required
    id = "id_username" / >
    '''

    #{{ forms.label }}是标签前面的注释,举例:input输入框前面的用户名,密码,年龄这些文字提示
    #{{ forms }} 是表单中所有的输入框
    #{{ forms.errors.0 }} 是固定用法,获取表单提交中的错误字段详细信息,咱后端或者前端页面都可以查看


    # 直接将生成的对象,传递给前端页面
    return render(request, 'index.html', locals())


检验数据神6条:
        1.通过Python解释器中的Python Console,导入MyForm类
            from app01 import views

        2.给写好的类,传字典数据(代校验的数据,生成一个代校验对象)
        form_obj=views.MyForm({'username':'jason','password':123,'email':'123@'})

        3.查看校验数据是否合法
        form_obj.is_valid()
        返回TRUE或者FALSE,FALSE代表数据中有错误

        4.如何查看不符合规则的字段和错误的原因
            form_obj.errors
            返回错误信息在控制台:
            {
            'email':['Enter a valid email address']
            }

        5.如何查看符合校验规则的数据
        form_obj.cleaned_date
        返回符合规则的数据:
        {
        'username':'jason',
        'password':123
        }

        6.forms组件中,定义的字段默认都是必须要传值的,
        注意事项,重要规则,传入的数据中属于我自己的东西,少一个也不行,
        不属于我的东西,多给我我也不会要。

        form_obj = views.MyForm({'username':'jason','password':'12345','email':'[email protected]','xxx':'嘿嘿嘿'})
        form_obj.is_valid()
        True



            {% for forms in forms_obj %}

            <p>{{ forms.label }}:{{ forms }}</p>
            <span>{{ forms.errors.0 }}</span>
            <span>{{ forms.label }}</span>
            <span>{{ forms }}</span>

            #{{ forms.label }}是标签前面的注释,举例:input输入框前面的用户名,密码,年龄这些文字提示
            #{{ forms }} 是表单中所有的输入框
            #{{ forms.errors.0 }} 是固定用法,获取表单提交中的错误字段详细信息,咱后端或者前端页面都可以查看

           {% endfor %}





おすすめ

転載: www.cnblogs.com/ludundun/p/11981015.html