python用户注册(基于django)
生活随笔
收集整理的這篇文章主要介紹了
python用户注册(基于django)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. 前端部分(引入jquery與bootstrap)
<div class="container"><div class="col-md-8 col-md-offset-2">{% for item in form %}<div class="form-group"><lable>{{ item.label }}</lable>{{ item }}<span class="error pull-right"></span></div>{% endfor %}<input type="submit" class="btn btn-primary reg_btn" value="提交"></div></div><script>$('.reg_btn').click(function () {$.ajax({url:'',type:"post",dataType:"json",data:{user:$('#id_user').val(),pwd:$('#id_pwd').val(),r_pwd:$('#id_r_pwd').val(),email:$('#id_email').val(),csrfmiddlewaretoken:$("[name='csrfmiddlewaretoken']").val(),},success:function (res) {if(res.user){location.href='/login/'}else{$('.error').html('');$('.form-group').removeClass('has-error');//對相應信息遍歷顯示在頁面 $.each(res.err,function (i,j){/**if(i=='__all__'){$('#id_r_p').next().html(j[0]).css('color','red').parent().addClass('has-error');}else{$('#id_'+i).next().html(j[0]).css('color','red').parent().addClass('has-error');}**///將錯誤信息顯示在生成的span里 $('#id_'+i).next().html(j[0]).css('color','red').parent().addClass('has-error');});}}});});</script>?
2. 后臺python
? 2.1 對django組件中用戶表字段的擴展
? (1)在models中添加用戶表新字段
from django.db import models from django.contrib.auth.models import AbstractUser# Create your models here. class user_info(AbstractUser):tel=models.CharField(max_length=32)???(2)在setting中更改用戶認證組件的表配置信息
AUTH_USER_MODEL='app01.user_info'????? 修改之后需重新遷移數據庫,如果無需添加新字段可省去上述步驟,直接使用django默認提供的auth_user表
?
??? 2.2? 業務代碼
from django.http import JsonResponse from django import forms from app01.models import user_info from django.core.exceptions import ValidationError import re from django.forms import widgets#注冊視圖函數 def register(request):if request.method=='GET':form=UserForm()return render(request,'register.html',locals())elif request.method=="POST":res={"user":None,'err':""}form=UserForm(request.POST)#驗證用戶信息if form.is_valid():res['user']=form.cleaned_data.get('user')user=form.cleaned_data.get('user')pwd=form.cleaned_data.get('pwd')email=form.cleaned_data.get('email')user_info.objects.create_user(username=user,password=pwd,email=email)else:res['err']=form.errorsreturn JsonResponse(res)#創建驗證規則對象 class UserForm(forms.Form):user=forms.CharField(max_length=32,label='用戶名')#widget = widgets.PasswordInput()前端密碼密文顯示pwd=forms.CharField(max_length=32,label='密碼',widget=widgets.PasswordInput())r_pwd=forms.CharField(max_length=32,label='確認密碼',widget=widgets.PasswordInput())email=forms.EmailField(max_length=32,label='郵箱')#使頁面渲染時增加需要的屬性def __init__(self,*args,**kwargs):super().__init__(*args,**kwargs)for filed in self.fields.values():filed.widget.attrs.update({'class':"form-control"})#設置鉤子,對相應的驗證框添加新的驗證規則(不一定會被執行)def clean_user(self):val=self.cleaned_data.get('user')user=user_info.objects.filter(username=val).first()if user:raise ValidationError('用戶已存在')else:return valdef clean_pwd(self):val = self.cleaned_data.get('pwd')if val.isdigit():raise ValidationError('密碼不能為純數字')else:return valdef clean_email(self):val=self.cleaned_data.get('email')if re.search('\w+@163.com$',val):return valelse:raise ValidationError('必須為163郵箱')# 全局鉤子,此方法一定會被執行def clean(self):pwd=self.cleaned_data.get('pwd')r_pwd=self.cleaned_data.get('r_pwd')if pwd and r_pwd and pwd!=r_pwd:# raise ValidationError('密碼不一致')self.add_error('r_pwd',ValidationError('兩次密碼不一致'))else:return self.cleaned_data?
轉載于:https://www.cnblogs.com/wangdamao/p/11564485.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的python用户注册(基于django)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python登录验证码(基于django
- 下一篇: python自定义分页器()转自http