【Django入坑之路】Form组件

1:From组件的简单使用

1创建From:

 1 #导入模块
 2 from django import forms
 3 from django.forms import fields,widgets   导入自定制插件
 4 
 5 
 6 class F1(forms.Form):
 7     自定制插件:widget=widgets.TextInput(attrs={'class': 123})设置属性
 8     user = fields.CharField(min_length=3,max_length=18,widget=widgets.TextInput(attrs={'class': 123})) 
 9 
10     age = fields.IntegerField(required=True)
11     email = fields.EmailField(required=12     file = fields.FileField(required=False)
13      TypedChoiceField ---- coerce=lambda x: int(x)接收的值转换成int类型
14     city = fields.TypedChoiceField(choices=((0,上海'),(1,1)">北京lambda x: int(x))
15      多选框
16     hobby = fields.MultipleChoiceField(choices=((0,1)">000111222333')),initial=(2,3)) 
View Code

2:函数处理:

from app03.form import F1  从创建的应用aoo03下导入from文件里的F1
 2 
def F1(reuqest):
 4      If request.method==”GET”:  
 5            F1.obj  = F1()         创建FORM组件定义的输入框
 6      Return render(request,”html文件”,{“obj”:obj})  输入框传到前端,错误提示保留数据
 7 
 8      If reqeust.method == “POST”:        
 9            F1.obj = F1(request.POST)  实例化自定义的FORM组件,接收数据
10      If obj.is_valid():          is_valid()  验证是否符合定义的正则
11          print("验证成功",obj.cleaned_data)     查看成功数据  
12     
######这个位置可以扩展数据库验证之类的操作,或者直接使用钩子验证
14         return redirect(http://想去的网址")
15 
16     else:
17         验证失败显示错误的提示 
18      Return render(request,{“obj”:obj})     降错误的提示传给前端
19 
20     注意:这里的GET与POST请求实例化FORM类的对象名(这里是obj)最好用一样的,否则会出现提交后输入框消失的情况
View Code

3:生成HTML:

 1  上传文件要加上enctype="multipart/form-data"   novalidate
 2  不适用浏览器默认错误提示要加上 novalidate
 3  
 4  <form action=/app03/project/" method=POST" enctype=multipart/form-data"   novalidate>
 5          <p>user:{{ obj.user }} {{ obj.errors.user.0}}</p>
 6          <p>age:{{ obj.age }}     {{ obj.errors.age.0}}</p>
 7          <p>email:{{ obj.email }}{{ obj.errors.email.0}}</p>
 8          <p>{{ obj.file }}{{ obj.errors.file.0}}</p>
 9          <p>{{ obj.city }}{{ obj.errors.city.0}}</p>
10          <p>{{ obj.hobby }}{{ obj.errors.hobby.0}}</p>
11         <p><input type=submit" value=提交"></p>
12 </form>
View Code

2:FROM类常用属性

1:Django常用内置字段:

Field
 2     required=True,是否允许为空
 3     widget=None,HTML插件
 4     label= 5     initial= 6     help_text='',帮助信息(在标签旁边显示)
 7     error_messages=None,错误信息 {required': 不能为空',1)">invalid格式错误'}
 8     show_hidden_initial=False,是否在当前插件后面再加一个隐藏的且具有默认值的插件(可用于检验两次输入是否一直)
 9     validators=[],自定义验证规则
10     localize=11     disabled=12     label_suffix=None            Label内容后缀
13 
14 
15 CharField(Field)
16     max_length=17     min_length=18     strip=True                   是否移除用户输入空白
20 IntegerField(Field)
21     max_value=22     min_value=23 
24 FileField(Field)
25     allow_empty_file=False     是否允许空文件
26 
27 ImageField(FileField)      
28     ...
29     注:需要PIL模块,pip3 install Pillow
30     以上两个字典使用时,需要注意两点:
31         - form表单中 enctype="
32         - view函数中 obj = MyForm(request.POST,request.FILES)
33 
34 
35 ChoiceField(Field)
36 37     choices=(),选项,如:choices = ((0,1)">),)
38     required=39     widget=40     label=41     initial=42     help_text=43 
44 
45 ModelChoiceField(ChoiceField)
46     ...                        django.forms.models.ModelChoiceField
47     queryset, 查询数据库中的数据
48     empty_label=--------- 默认空显示内容
49     to_field_name=None,1)"> HTML中value的值对应的字段
50     limit_choices_to=None       ModelForm中对queryset二次筛选
View Code

 2:Django内置插件:

TextInput(Input)
NumberInput(TextInput)
EmailInput(TextInput)
 4 URLInput(TextInput)
 5 PasswordInput(TextInput)
HiddenInput(TextInput)
 7 Textarea(Widget)
 8 DateInput(DateTimeBaseInput)
 9 DateTimeInput(DateTimeBaseInput)
10 TimeInput(DateTimeBaseInput)
11 CheckboxInput
12 Select
13 NullBooleanSelect
14 SelectMultiple
RadioSelect
16 CheckboxSelectMultiple
17 FileInput
18 ClearableFileInput
19 MultipleHiddenInput
SplitDateTimeWidget
21 SplitHiddenDateTimeWidget
22 SelectDateWidget
View Code

3:全局钩子,局部钩子

 1 1:全局钩子:
两个密码校验
 4      clean(self):
 5         pwd = self.cleaned_data.get(password") 校验后的name=password属性密码
 6         re_pwd = self.cleaned_data.get(again_password校验后的name=again_password属性密码
 7         if pwd != re_pwd:
 8            如果不一致就添加错误信息返回
 9             self.add_error(两次密码不一致))
10         11             return self.cleaned_data    
12 
局部钩子--用户名
14     def clean_username(self):  clean_验证的字段
15         username = self.cleaned_data.get(username拿到输入的字段
16         obj_user = models.UserInfo.objects.filter(username = username)数据库查找这个字段
17        
18         if obj_user: 如果存在
19             self.add_error(用户名已存在20         21              username
22 
局部钩子--手机号去重
25     def clean_phone(self):  26         phone = self.cleaned_data.get(phone")   27         obj_user = models.UserInfo.objects.filter(phone=phone) 28          如果存在
29         if obj_user:
30             self.add_error(手机号已存在31         32             return phone
View Code

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


注:所有源代码均实测运行过。所有源代码均已上传CSDN,请有需要的朋友自行下载。
继承APIView和ViewSetMixin;作用也与APIView基本类似,提供了身份认证、权限校验、流量管理等。ViewSet在开发接口中不经常用。
一、Django介绍Python下有许多款不同的 Web 框架。Django是重量级选手中最有代表性的一位。许多成功的网站和APP都基于Django。Django 是一个开放源代码的 Web 应用框架,由 Python 写成。Django 遵守 BSD 版权,初次发布于 2005 年 7 月, 并于 2008 年 9 月发布了第一个正式版本 1.0 。Django学习线路Django 采用了 MVT 的软件设计模式,即模型(Model),视图(View)和模板(Template)。这个MVT模式并
本文从nginx快速掌握到使用,gunicorn快速掌握到使用,实现小白快速搭建django项目,并对可能出现的报错进行了分析
uniapp微信小程序订阅消息发送服务通知
Django终端打印SQL语句 1 Setting配置: 2 默认python 使用的MysqlDB连接,Python3 支持支持pymysql 所有需要在app里面的__init__加上下面配置:
url: re_path(&#39;authors/$&#39;, views.AuthorView.as_view()), re_path(&#39;book/(?P\d+)/$&#39;, vie
前提 关于html寻找路线: template 如果在各个APP中存在, Django 会优先找全局template 文件下的html文件,如果全局下的template文件没有相关的html Djan
// GET请求request.GET // POST请求request.POST // 处理文件上传请求request.FILES // 处理如checkbox等多选 接受列表request.get
from bs4 import BeautifulSoup#kindeditordef kindeditor(request): s = &#39;&#39;&#39; &lt;li&gt;&lt;s
view.py 配置 html 配置
from django.http import JsonResponse JsonResponse 里面代码会加这一个响应头 kwargs.setdefault(&#39;content_type&#
#下面两种是基于QuerySet查询 也就是说SQL中用的jion连表的方式查询books = models.UserInfo.objects.all() print(type(books)) &gt
return HttpResponse(&quot;OK&quot;) 返回一个字符串 return redirect(&quot;/index/&quot;) 返回URL return render
from django.http import JsonResponse JsonResponse 里面代码会加这一个响应头 kwargs.setdefault(&#39;content_type&#
浏览器有一个很重要的概念——同源策略(Same-Origin Policy)。所谓同源是指,域名,协议,端口相同。不同源的客户端脚本(javascript、ActionScript)在没明确授权的情况
自动发送 &gt; 依赖jQuery文件 实例--&gt;GET请求: 手动发送 &gt; 依赖浏览器XML对象(也叫原生ajax) Ajax主要就是使用 【XmlHttpRequest】对象来完成请
#下面两种是基于QuerySet查询 也就是说SQL中用的jion连表的方式查询books = models.UserInfo.objects.all() print(type(books)) &gt
// GET请求request.GET // POST请求request.POST // 处理文件上传请求request.FILES // 处理如checkbox等多选 接受列表request.get
return HttpResponse(&quot;OK&quot;) 返回一个字符串 return redirect(&quot;/index/&quot;) 返回URL return render