基于form表单 写登陆注册
urls
urlpatterns = [ url(r'^admin/', admin.site.urls), # 登录界面url(r'^login/$', views.login,name='login'), # 注册界面url(r'^reg/$', views.reg,name='reg'),]
forms
from django import forms
# 注册 formclass RegForm(forms.ModelForm):
username= forms.EmailField(label='用户名', error_messages={'required':'邮箱不能为空', 'invalid':'邮箱格式错误'}, ) password = forms.CharField( label='密码', min_length=8, strip=True, widget=forms.widgets.PasswordInput(), validators=[RegexValidator(r'^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,16}$', '输入8-16位密码数字与字母')], error_messages={ 'min_length': '用户名不小于8', 'required': '不能为空' } ) re_password = forms.CharField( label='确认密码', min_length=8, strip=True, widget=forms.widgets.PasswordInput(), validators=[RegexValidator(r'^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,16}$', '输入8-16位密码数字与字母')], error_messages={
'required': '不能为空' } ) name = forms.CharField( label='姓名', strip=True, validators=[check_name], error_messages={
'required': '不能为空' }
) # 配置文件 用class Meta class Meta: # 继承表格 model=models.UserProfile # 字段顺序 1.fields = '__all__' 所有字段 2. exclude = [''] 除了列表里的 fields=['username','password', 're_password', 'name', 'department'] # 指定的字段 # 设置字段名 labels={'username':'用户名','department': '部门'}
# 全局钩子判断2次密码一直不 用户存在没def clean(self): pwd=self.cleaned_data.get('password') re_pwd=self.cleaned_data.get('re_password') username=self.cleaned_data.get('username') user_model = list(models.UserProfile.objects.all().values_list('username')) for i in user_model: if username in i: self.add_error('username', '用户名已存在') raise ValidationError('用户名已存在') if pwd == re_pwd: return self.cleaned_data self.add_error('re_pwd','两次密码不一致') raise ValidationError('两次密码不一致')
views
from crm.forms import RegFormfrom django.contrib import auth
# 注册界面def reg(request): form_obj=RegForm() if request.method=='POST': form_obj = RegForm(request.POST) if form_obj.is_valid(): # 获取注册信息方法一 # form_obj.cleaned_data.pop('re_password') # UserProfile.objects.create_user(**form_obj.cleaned_data)
# 获取注册信息方法二 obj=form_obj.save() obj.set_password(obj.password) obj.save() return redirect('/crm/login/') return render(request,'reg.html',{'a':form_obj})
#登录
def login(request): err_msg = '' if request.method == 'POST': username = request.POST.get('username') password = request.POST.get('password') obj = auth.authenticate(request, username=username, password=password) if obj: return redirect('/index/') err_msg = '用户名或密码错误' return render(request, 'login.html', {'err_msg': err_msg})
html
<h1>注册</h1>
<form class="form-horizontal" action="" method="post" novalidate> {% csrf_token %} <div class="form-group {% if a.username.errors %}has-error {% endif %}"> <label for="{{ a.username.id_for_label }}" class="col-sm-5 control-label">{{ a.username.label }}</label> <div class="col-sm-3">{{ a.username}} <span id="helpBlock2" class="help-block">{{ a.username.errors.0}}</span> </div> </div>
<div class="form-group {% if a.password.errors %}has-error {% endif %}"> <label for="{{ a.password.id_for_label }}" class="col-sm-5 control-label">{{ a.password.label }}</label> <div class="col-sm-3">{{ a.password }} <span id="helpBlock2" class="help-block">{{ a.password.errors.0}}</span> </div> </div>
<div class="form-group {% if a.re_password.errors %}has-error {% endif %}"> <label for="{{ a.re_password.id_for_label }}" class="col-sm-5 control-label">{{ a.re_password.label }}</label> <div class="col-sm-3">{{ a.re_password }} <span id="helpBlock2" class="help-block">{{ a.re_password.errors.0}}</span> </div> </div>
<div class="col-sm-offset-5 col-sm-3"> <button type="submit" class="btn btn-primary btn-block ">提交</button> </div> </div> </form> <h1>登录</h1>
<form action="" method="post"> {% csrf_token %} <div class="login-top"> 登录</div><div class="login-center clearfix"> <div class="login-center-img"><img src="{% static 'imgs/name.png' %}"></div> <div class="login-center-input"> <input type="text" name="username" value="admin" placeholder="请输入您的用户名" onfocus="this.placeholder=''" onblur="this.placeholder='请输入您的用户名'"> <div class="login-center-input-text">用户名</div> </div></div>
<div class="login-center clearfix"> <div class="login-center-img"><img src="{% static 'imgs/password.png' %}"></div> <div class="login-center-input"> <input type="password" name="password" value="" placeholder="请输入您的密码" onfocus="this.placeholder=''" onblur="this.placeholder='请输入您的密码'"> <div class="login-center-input-text">密码</div> </div></div>
<div style="text-align: center"> <button class="login-button">登录</button></div></form>
基于form表单 写登陆注册的更多相关文章
- django 基于form表单上传文件和基于ajax上传文件
一.基于form表单上传文件 1.html里是有一个input type="file" 和 ‘submit’的标签 2.vies.py def fileupload(request ...
- Django框架form表单配合ajax注册
总结一下,其实form组件的主要功能如下: 生成页面可用的HTML标签 对用户提交的数据进行校验 保留上次输入内容 下面是写的登录页面的实例 1:views视图中的代码 # 注册页面 def regi ...
- 基于form表单submit提交不跳转
方法一:target <html> <body> <form action="" method="post" target=&qu ...
- 基于Spring MVC实现基于form表单上传Excel文件,批量导入数据
在pom.xml中引入: <!--处理2003 excel--> <dependency> <groupId>org.apache.poi</groupId& ...
- 基于form表单的极验滑动验证小案例
01.目录展示 02.url.py urlpatterns = [ path('admin/', admin.site.urls), path('login/',views.login), path( ...
- Laravel使用artisan快速实现表单的登陆注册
1. 开发环境 macOS Mojave 10.14.6 XAMPP 5.6.38 Laravel 5.2 2. 在终端,先进入到项目根目录并执行执行命令 php artisan make:auth ...
- 基于Spring3 MVC实现基于form表单文件上传
http://blog.csdn.net/jia20003/article/details/8474374/
- python自动化开发-[第二十天]-form表单,CBV和FBV,序列化
1.CBV和FBV的用法 2.序列化用法 3.form表单 一.CBV和FBV 1.cbv是 class based view(基于类),fbv是function based view(基于函数) 2 ...
- 前端-form表单与CSS
目录 form表单 表单属性 label标签 input标签 select 下拉框标签 textarea多行文本 提交 Flask 结合form表单 初探 CSS介绍以及基本选择器 基本选择器 组合选 ...
随机推荐
- python之二分法查找
二分法查找主要的作用就是查找元素 规则. 掐头结尾取中间, 必须是有序列 # 二分法查找 (需要你明白和掌握) # lst = [1,3,5,7,12,36,68,79] # n = int(inpu ...
- Linux中实现文本过滤
alias命令 功能:设置指令的别名 语法:alias [别名]=[指令名称] 参数:若不加任何参数,则列出所有别名的设置 说明:alias仅作用于当前登录的shell.若要永久使用别名,可在/etc ...
- Kruskal算法(题目还是:畅通工程)
那还是先把题目丢出来,是HDU上的一道题 畅通工程 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Jav ...
- case语法
一.文件系统访问列表 FACL :Filesystem Access Control List 文件系统访问列表 利用文件扩展保存额外的访问控制权限. setfacl: -m:设定访问控制权限 ...
- python3+requests:接口自动化测试(二)
转载请注明出处:https://www.cnblogs.com/shapeL/p/9188495.html 前言:上篇文章python3+requests+unittest:接口自动化测试(一):ht ...
- 关于$\mathcal{D}(0,1)$上的一个有趣结论
[转载请注明出处]http://www.cnblogs.com/mashiqi 2017/02/20 在$\mathcal{D}(0,1)$上取定$\varphi_0 \in \mathcal{D}( ...
- Gym - 101201E:Enclosure (点到凸包的切线)
题意:给点N棵树,前K棵是已经拥有的,现在可以再拥有一棵树,问形成的最大凸包面积. 思路:先求K棵树的凸包C,然后对于后面的N-K棵树,我们先判断是否在凸包内,如果不在,我们要求两个切线. 这里分类讨 ...
- CSS3 transform变形(3D转换)
一.三维坐标 空间中三维坐标如下图所示: 向上为-Y,向下为+Y,向左为-X,向右为+X,向前为+Z,向后为-Z. 二.perspective(n)为 3D 转换元素定义透视视图 perspectiv ...
- The Tower of Babylon(UVa 437)
题意:有n种立方体,每种都有无穷多个.选一些正方体摞成一根尽量高的柱子(可以选择任意一条边做高),使得每个立方体的底面长宽分别严格小于它下方的立方柱的底面长宽. 题解:可以套用DAG最长路算法,可以使 ...
- java-Calendar类
1.Calendar类的概述和获取日期的方法 * A:Calendar类的概述 * Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR.MONTH.DAY_OF_MONTH.HOUR ...