目录:
注册功能(使用forms组件)
- 解耦合在app01中创建myforms.py
from django import forms from django.forms import widgets from app01 import models class RegForm(forms.Form): username = forms.CharField(max_length=8, min_length=3, label='用户名', error_messages={ 'max_length': '用户名最大8位', 'min_length': '用户名最小3位', 'required': '用户名不能为空', }, widget=widgets.TextInput(attrs={ "class": 'form-control'})) password = forms.CharField(max_length=8, min_length=3, label='密码', error_messages={ 'max_length': '密码最大8位', 'min_length': '密码最小3位', 'required': '密码不能为空', }, widget=widgets.PasswordInput(attrs={ "class": 'form-control'})) confirm_password = forms.CharField(max_length=8, min_length=3, label='确认密码', error_messages={ 'max_length': '再次确认的密码最大8位', 'min_length': '再次确认的密码最小3位', 'required': '再次确认的密码不能为空', }, widget=widgets.PasswordInput(attrs={ "class": 'form-control'})) email = forms.EmailField(label='邮箱', error_messages={ 'invalid': '邮箱格式不正确', 'required': '邮箱不能为空' }, widget=widgets.EmailInput(attrs={ "class": 'form-control'})) # 局部钩子,校验用户名是否存在 def clean_username(self): username = self.cleaned_data.get('username') is_user = models.UserInfo.objects.filter(username=username) if is_user: self.add_error('username', '用户名已存在') return username # 全部钩子,校验密码是否一致 def clean(self): password = self.cleaned_data.get('password') confirm_password = self.cleaned_data.get('confirm_password') if not password == confirm_password: self.add_error('confirm_password', '两次密码不一致') return self.cleaned_data
- 注册逻辑
from django.shortcuts import render, redirect, HttpResponse from app01 import myforms from app01 import models from django.http import JsonResponse # Create your views here. def register(request): # 内部状态码 back_dic = { 'code': 100, 'msg': ''} form_obj = myforms.RegForm() if request.method == 'POST': form_obj = myforms.RegForm(request.POST) if form_obj.is_valid(): clean_data = form_obj.cleaned_data clean_data.pop('confirm_password') avatar = request.FILES.get('myfile') if avatar: clean_data['avatar'] = avatar models.UserInfo.objects.create_user(**clean_data) back_dic['msg'] = '注册成功' back_dic['url'] = '/login/' else: back_dic['msg'] = form_obj.errors back_dic['code'] = 201 return JsonResponse(back_dic) return render(request, 'register.html', locals())
- 前端页面
<!DOCTYPE html> <html lang