HTML页面代码块:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5
 6     <link rel="stylesheet" href="/static/bootstrap/css/bootstrap.min.css">
 7     <title>首页</title>
 8 </head>
 9 <body>
10
11 <div class="container">
12     <div class="row">
13         <div class="col-md-6 col-md-offset-3">
14             <form action="/index/" method="post" novalidate>
15                 {% csrf_token %}
16                 <div class="form-group {% if reg.user.errors.0 %} has-error {% endif %}">
17                     {{ reg.user.label }}
18                     {{ reg.user }}
19                     <span class="help-block" id="s1">{{ reg.user.errors.0 }}</span>
20                 </div>
21                 <div class="form-group {% if reg.psd.errors.0 %} has-error {% endif %}">
22                     {{ reg.psd.label }}
23                     {{ reg.psd }}
24                     <span class="help-block">{{ reg.psd.errors.0 }}</span>
25                 </div>
26                 <div class="form-group {% if reg.re_pwd.errors.0 %} has-error {% endif %}">
27                     {{ reg.re_pwd.label }}
28                     {{ reg.re_pwd }}
29                     <span class="help-block">{{ reg.re_pwd.errors.0 }}</span>
30                 </div>
31                 <div class="form-group {% if reg.email.errors.0 %} has-error {% endif %}">
32                     {{ reg.email.label }}
33                     {{ reg.email }}
34                     <span class="help-block">{{ reg.email.errors.0 }}</span>
35                 </div>
36                 <div class="form-group {% if reg.mobile.errors.0 %} has-error {% endif %}">
37                     {{ reg.mobile.label }}
38                     {{ reg.mobile }}
39                     <span class="help-block">{{ reg.mobile.errors.0 }}</span>
40                 </div>
41
42                 <div class="form-group {% if reg.city.errors.0 %} has-error {% endif %}">
43                     {{ reg.city.label }}
44                     {{ reg.city }}
45                     <span class="help-block">{{ reg.city.errors.0 }}</span>
46                 </div>
47                 <div class="form-group">
48                     <button type="submit" class="btn btn-success">登录</button>
49                 </div>
50
51             </form>
52         </div>
53     </div>
54
55 </div>
56
57 <script src="/static/jquery-3.3.1.min.js"></script>
58 <script src="/static/csrf_ajax.js"></script>
59 <script src="/static/bootstrap/js/bootstrap.min.js"></script>
60 <script>
61     $("#id_user").on ('input',function () {
62         var user=$(this).val();
63         $("#s1").text('');
64         $.ajax({
65             url:'/check/',
66             type:'POST',
67             data:{"user":user},
68             datatype:'json',
69             success:function (arg) {
70                 if (arg){
71
72                     $("#s1").text(arg).css("color", "red");
73
74                 }
75
76             }
77         })
78     })
79 </script>
80 </body>
81 </html>

views代码块的逻辑处理:>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

 1 from django.shortcuts import render,redirect,HttpResponse
 2
 3 # Create your views here.
 4
 5 from appfind import models
 6
 7 def check(request):
 8     if request.method=="POST":
 9         user=request.POST.get('user')
10         user_obj=models.UserInfo.objects.filter(user=user)
11         if user_obj:
12             msg='用户名已存在。请更换!'
13         else:
14             msg=''
15         return HttpResponse(msg)
16
17 from django import forms
18 from django.forms import widgets
19 from django.core.validators import RegexValidator
20 from  django.core.exceptions import ValidationError
21 class RegForm(forms.Form):  #利用RegForm去生成HTML字段标签
22     user=forms.CharField(max_length=32,label='用户名',
23                          error_messages={"required": "该字段不能为空",},
24                          widget=widgets.TextInput(attrs={'class':'form-control'}))
25     psd=forms.CharField(label='密码',min_length=6,max_length=30,
26                         widget=widgets.PasswordInput(attrs={'class':'form-control'},render_value=True),
27                         error_messages={'min_length':'密码不能少于6位',
28                                         "max_length": "密码最长30位!",
29                                         "required": "该字段不能为空",})
30     re_pwd = forms.CharField(label='确认密码', min_length=6, max_length=30,
31                              widget=widgets.PasswordInput(attrs={'class': 'form-control'}, render_value=True),
32                              error_messages={'min_length': '密码不能少于6位',
33                                              "max_length": "密码最长30位!",
34                                              "required": "该字段不能为空", })
35     email=forms.EmailField( label="邮箱",
36                             widget=widgets.EmailInput(attrs={"class": "form-control"}),
37                             error_messages={
38                                 "required": "该字段不能为空",
39                             })
40     mobile = forms.CharField(label="手机",
41                              validators=[
42                                  RegexValidator(r'^[0-9]+$','手机号码必须是数字'),
43                                  RegexValidator(r'^1[3-8][0-9]{9}$','手机格式有误')
44                              ],
45                              widget=widgets.TextInput(attrs={"class": "form-control"}),
46                              error_messages={
47                                  "required": "该字段不能为空",
48                              })
49     def clean_user(self):  #clean_user  user 就是要检验的字段
50         value=self.cleaned_data.get('user')
51         if "独裁" in value:
52             raise ValidationError("不符合社会主义核心价值观!")
53         return value
54
55     def clean(self):   #重写父类的clean方法
56         # 此时 通过检验的字段的数据都保存在 self.cleaned_data
57         psd=self.cleaned_data.get('psd')
58         re_pwd=self.cleaned_data.get('re_pwd')
59         if psd != re_pwd:
60             self.add_error('re_pwd',ValidationError('两次密码不一致'))
61             raise ValidationError('两次密码不一致')
62         return self.cleaned_data
63
64     city=forms.ChoiceField(
65         choices=models.City.objects.all().values_list('id','name'),
66         label='城市',
67         initial=1,
68         widget=forms.widgets.Select
69     )
70
71     def __init__(self,*args,**kwargs):   #重写父类的__init__方法
72         super().__init__(*args,**kwargs)  #每次初始化加载插件就重新再数据库里取值
73         self.fields['city'].widget.choices=models.City.objects.all().values_list('id','name')
74
75 def index(request):
76     regform=RegForm()           #实例化一个RegForm对象
77     if request.method=="POST":
78         regform = RegForm(request.POST)  #获取对象
79         if regform.is_valid():           #校验对象的所有字段
80             del regform.cleaned_data['re_pwd']     #删除部分用户表不需要存储的字段
81             del regform.cleaned_data['city']
82             models.UserInfo.objects.create(**regform.cleaned_data)  #数据库添加用户数据
83             return HttpResponse('恭喜,注册成功!')
84
85     return render(request,'index.html',{'reg':regform})
86     #get请求直接把RegForm对象传给页面

转载于:https://www.cnblogs.com/wen-kang/p/9635332.html

用Django内置form组件实现注册相关推荐

  1. Django内置Admin

    Django内置的Admin是对于model中对应的数据表进行增删改查提供的组件,使用方式有: 依赖APP:django.contrib.authdjango.contrib.contenttypes ...

  2. django 内置 admin

    Django内置的Admin是对于model中对应的数据表进行增删改查提供的组件使用方式有依赖APPdjango.contrib.authdjango.contrib.contenttypesdjan ...

  3. 〖Python〗-- Django内置Admin

    [Django内置Admin] Django内置的Admin是对于model中对应的数据表进行增删改查提供的组件,使用方式有: 依赖APP:django.contrib.authdjango.cont ...

  4. Django - 内置admin

    Django内置的Admin是对于model中对应的数据表进行增删改查提供的组件,使用方式有: Django内置的Admin是对于model中对应的数据表进行增删改查提供的组件,使用方式有:复制代码依 ...

  5. django框架之form组件

    内容回顾: 1. 内容回顾     1. 复习JSON         1. JSON是什么?             一种数据格式,和语言无关的数据格式.         2. Python里面转换 ...

  6. 浅谈Vue内置component组件的应用场景

    官方的说明 渲染一个"元组件"为动态组件.依 is 的值,来决定哪个组件被渲染. <!-- 动态组件由 vm 实例的属性值 `componentId` 控制 --> & ...

  7. Django内置权限扩展案例

    当Django的内置权限无法满足需求的时候就自己扩展吧~ 背景介绍 overmind项目使用了Django内置的权限系统,Django内置权限系统基于model层做控制,新的model创建后会默认新建 ...

  8. Win7下的内置FTP组件的设置详解

    Win7下的内置FTP组件的设置详解 在局域网中共享文件,FTP是比较方便的方案之一.Win7内部集成了FTP,只是设置起来颇费一番功夫.着文以记之. 一.安装FTP组件 由于Win7默认没有安装FT ...

  9. Django内置的分页模块

    自定义分页 未封装版: 优点:直观 缺点:代码乱,不易维护,可拓展性差 data = []for i in range(1, 302):tmp = {"id": i, " ...

最新文章

  1. java事务写法_【Spring4】采用注释写法,事务回滚报错问题
  2. 5G最完整的PPT教材
  3. Android KitKat 4.4 Wifi移植AP模式和网络共享的调试日志
  4. mysql三大范式 答案_数据库三大范式的个人理解~!
  5. 《C++ Primer》8.3.1节练习
  6. iOS-cocoapods使用方法
  7. 点击windows live writer无反应 / 使用windows live writer的前提
  8. linux进程增删改查,iptables的增删改查
  9. 【实践】多模态内容理解技术在腾讯搜索中的应用及实践.pdf(附下载链接)
  10. 多目标跟踪数据集 :mot16、mot17数据集介绍
  11. 网关信息认证服务器不可达,网关消息认证服务器不可达
  12. qt中的信号都需要emit触发吗_[Vue笔记] $emit 与 $event
  13. coreldraw x4最新精简中文矢量绘图软件
  14. 学习LSL:Locate-Globally-Segment-locally
  15. Java可变参数的基本使用
  16. 如何增加你微博的粉丝人数?微博推广20绝招
  17. python京东抢购软件神器_用Python在京东抢购商品
  18. 创建表空间oracle10g,Oracle10g创建表空间慢问题
  19. py使用polar绘制霍兰德职业测试雷达图
  20. 打开网络邻居有很多计算机,教你网上邻居无法看到其它共享电脑的解决方法

热门文章

  1. 【转】C/C++中的日期和时间
  2. C#WinForm的线程及Invoke应用(转)
  3. OpenCV+python:霍夫变换与直线检测
  4. 华科计算机学院多难考,计算机学院2019年硕士研究生入学考试成绩公告
  5. mysql query browswer_MySQL数据库新特性之存储过程入门教程
  6. 角色转移服务器维护怎么回事,服务器互通及游戏角色转移说明
  7. php jq实现抽奖,jquery实现抽奖系统
  8. java new string 图_Java中String直接赋字符串和new String的一些问题
  9. android类名方法名不混淆,android – 如何告诉Proguard混淆类名
  10. java 购物车价格类型_WooCommerce - 为购物车中的每个产品添加自定义价格