from组件

Posted Lazyball

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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‘: [‘[email protected]‘]}>
        
        ‘‘‘
        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‘: ‘[email protected]‘}

            ‘‘‘
            #然后就可以拿到每个字段 存入数据库
            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">

 

以上是关于from组件的主要内容,如果未能解决你的问题,请参考以下文章

VsCode 代码片段-提升研发效率

Docker删除报错:Error response from daemon: conflict: unable to delete 08b152afcfae (must be forced)(代码片段

Discuz代码片段

`from ... import`与`import .` [重复]

这些角度电子邮件指令代码片段如何连接

微信小程序代码片段