zoukankan      html  css  js  c++  java
  • from组件

    使用form组件的大概步骤

    概述

    使用form组件的步骤
        后端:
            定义class 类
            将实例化的对象传给前端
        前端:
            定义form表单
            根据实际情况利用后端传过来的对象渲染标签

    后端代码

    ################froms.py##################
    
    #
    !/usr/bin/env python # -*- coding: utf-8 -*- from django import forms from django.forms import widgets #定义一个类 class RegForm(forms.Form): username=forms.CharField(max_length=32,min_length=8,error_messages={'required':'该字段不能为空'}) password=forms.CharField( widget=widgets.PasswordInput(),#修改成password类型 那么前端渲染出的input的 type='password' error_messages={'invalid':'格式错误,必须输入数字'} )#针对password不能直接用charfield 需要做成密文的 charfield默认渲染出来的input的type都是text类型 repeat_password=forms.CharField( widget=widgets.PasswordInput() #widget=widgets.Select() #还可以渲染别的标签 默认是input吧 #widget=widgets.PasswordInput(可以加参数) 例如:widget=widgets.PasswordInput(attrs={'egon':'123'})设置属性 #渲染后的结果为<input type="password" name="repeat_password" egon="123" required="" id="id_repeat_password"> #岂不是以后可以愉快的设置 默认值 以及class了 ) email=forms.EmailField()
    ##########views.py###################
    
    from django.shortcuts import render,HttpResponse,redirect
    from books.froms import RegForm
    def reg(request):
    
        if request.method=='POST':
            '''
            print(request.POST)
            打印结果:
            <QueryDict: {'csrfmiddlewaretoken': ['E4g1RpPoB0hgC7KcsQDdYFivAYTIGJ6jRGdlcxdQAeWJT8zA4E8Z3jMEul46k9ib'], 
            'username': ['VCB'], 'password': ['GFBH'], 'repeat_password': ['NFGN'], 
            'email': ['123@qq.com']}>
            
            '''
            regForm=RegForm(request.POST)#将取到的数据放在空的对象里 就是一个有东西的对象了
            if regForm.is_valid(): #然后对对象做校验 返回 True False
                '''
                如果成功取出数据 存入数据库 返回登录页面 
                 取出数据:
                 虽然也可以用request.POST拿出数据但是 form组件有自己放的地方
                 regForm.cleaned_data 存放的是所有的干净的数据
                 print(regForm.cleaned_data) 
                 打印结果:
                 {'username': 'lalalal', 'password': 'dfsdfdsfdfds', 
                 'repeat_password': 'dfdsfdfdsfdf', 
                 'email': '123@qq.com'}
    
                '''
                #然后就可以拿到每个字段 存入数据库
                print(regForm.cleaned_data['username'])
            else:
                '''
                如果错误 拿到错误信息 展示在页面
                错误信息存放处:
                regForm.errors 存放错误字段 以及对应的错误信息
                '''
                print(regForm.errors)
                '''
                例如:用户名不够长 错误信息其实是个封装后的字典
                <ul class="errorlist"><li>username
                <ul class="errorlist"><li>Ensure this value has at least 8 characters (it has 2).
                </li></ul></li></ul>
                '''
                #regForm.errors.get('username') 取出username对应的错误信息
            return render(request,'reg.html',{'regForm':regForm}) #此时的regFrom是有数据的 包括错误信息 如果有的话 前端可以取到了
        #用类来实例化对象
        regForm=RegForm() #此时这个对象是空的
        #然后把这个对象传到前端去
        return render(request,'reg.html',{'regForm':regForm})

    前端代码

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <p>欢迎新注册!!</p>
    
    <form action="/reg/" method="post">
        {% csrf_token %}
        <p>姓名:{{ regForm.username }}</p><span>{{ regForm.errors.username.0 }}</span> #拿到username的错误信息 可能有多条 拿第一个
        <p>密码:{{ regForm.password }}</p><span>{{ regForm.errors.password.0 }}</span>
        <p>确认密码:{{ regForm.repeat_password }}</p>{{ regForm.errors.repeat_password.0 }}
        <p>邮箱:{{ regForm.email }}</p><span>{{ regForm.errors.email.0 }}</span>
        <p><input type="submit" value="提交"></p>
    </form>
    </body>
    </html>

     from类字段详解

    from django import forms
    
    class RegisterForm(forms.Form):
        username = forms.CharField(max_length=100,
                                   error_messages={"min_length":"最短为5个字符","required":"该字段不能为空"},
                                   )
        password = forms.CharField(max_length=100,
                                   widget=widgets.PasswordInput(attrs={"placeholder":"password"})
                                    )
    
        telephone=forms.IntegerField(
            error_messages={
                "invalid":"格式错误"
            }
    
                                    )
    
        gender=forms.CharField(
              initial=2,
              widget=widgets.Select(choices=((1,'上海'),(2,'北京'),))
                 )
    
        email = forms.EmailField()
        is_married = forms.BooleanField(required=False)

    Widgets

    每个表单字段都有一个对应的Widget 类,它对应一个HTML 表单Widget,例如<input type="text">

    在大部分情况下,字段都具有一个合理的默认Widget。例如,默认情况下,CharField 具有一个TextInput Widget,它在HTML 中生成一个<input type="text">

  • 相关阅读:
    网管的自我修养-网络系统
    网管的自我修养-电脑维护
    iOS继承与类别
    iOS支付宝集成
    HTTP HTTPS TCP/IP UDP
    AFNetworking新版本3.0的迁移
    GCD使用 并行串行队列同步异步执行组合情况
    使用vim遇到的问题
    mac取色
    网络解析
  • 原文地址:https://www.cnblogs.com/lazyball/p/7994481.html
Copyright © 2011-2022 走看看