基于form表单 写登陆注册
2024-08-28 20:32:59
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>
最新文章
- sql 触发器删除操作
- BZOJ 2654 &; 玄学二分+MST
- CentOS配置本地光盘yum源
- 【Android】Android Camera原始帧格式转换 —— 获取Camera图像(一)
- python trackback的使用心得
- MySQL zabbix
- html2canvaces用法,js截屏并且下载
- 基于Jquery、JqueryUI插件编写
- php折半查找(数组必须为有序)
- linux tricks 之 FIELD_SIZEOF.
- 预处器的对比——Sass、LESS.
- Linux开启相关端口及查看已开启端口
- a标签href不跳转 禁止跳转
- VisualStudioOnline协同工作流程
- CSS三大样式
- [翻译] 使用 Python 创建你自己的 Shell:Part I
- 移植mysql到ARM(AM335x)
- 19-06 【phpunit和docker】
- python 要掌握面向对象,你得会做这些题
- Android NDK MediaCodec在ijkplayer中的实践