一、数据表结构设计
项目应用account的模型MyUser是项目中的核心数据 它与每个项目应用的模型都存在数据关联。模型MyUser继承内置模型User 在内置模型User的基础上添加新的字段 用于完善用户信息。打开项目应用account的models.py定义模型MyUser 代码如下
class MyUser(AbstractUser): name models.CharField(verbose_name 姓名 ,max_length 50,default 匿名用户 ) introduce models.TextField(verbose_name 简介 ,default 暂无介绍 ) company models.CharField(verbose_name 公司 ,max_length 100,default 暂无信息 ) profession models.CharField(verbose_name 职业 ,max_length 100,default 暂无信息 ) address models.CharField(verbose_name 地址 , max_length 100, default 暂无信息 ) telephone models.CharField(verbose_name 电话 , max_length 11, default 暂无信息 ) wx models.CharField(verbose_name 微信 , max_length 50, default 暂无信息 ) qq models.CharField(verbose_name qq ,max_length 50,default 暂无信息 ) wb models.CharField(verbose_name 微博 , max_length 100, default 暂无信息 ) photo models.ImageField(verbose_name 头像 , blank True,upload_to images/user/ ) create_time models.DateTimeField(verbose_name 创建时间 , auto_now_add True) class meta: verbose_name 用户 verbose_name_plural verbose_name db_table MyUser def __str__(self): return self.name
二、路由定义
采用路由下发的方式 我们在Myblog的urls.py下设置account的路由
# Myblog的 urls.py urlpatterns [ path( admin/ , admin.site.urls), path( user/ , include( app.account.urls )), # account的 urls.py urlpatterns [ path( register , Register.as_view(), name register ), path( login , UserLogin.as_view(), name userLogin ),
三、编写视图类
我们在account创建一个一个forms.py用来创建UserForm类 用来进行表单认证
from django import forms from django.forms import Form from app.account.models import MyUser from captcha.fields import CaptchaField class UserForm(Form): username forms.CharField( widget forms.TextInput password forms.CharField( widget forms.PasswordInput cp forms.CharField( widget forms.PasswordInput, required False type forms.CharField( widget forms.TextInput captcha CaptchaField() def clean(self): username self.cleaned_data.get( username , ) if self.cleaned_data.get( type , ) register : if not username: raise forms.ValidationError( 用户名不能为空 ) else: user MyUser.objects.filter(username username).exists() if user: raise forms.ValidationError( 用户名已存在 ) p self.cleaned_data.get( password , ) cp self.cleaned_data.get( cp , ) if p ! cp: raise forms.ValidationError( 两次密码不一致 ) else: username : username, password : p, is_superuser : 1, is_staff : 1 user MyUser.objects.create_user(**d)# create_user自动将明文密码hash加密 user.save() else: if not username: raise forms.ValidationError( 用户名不能为空 )
在account的view.py添加如下代码
from django.shortcuts import render, redirect, reverse from django.views.generic import View from .forms import * from django.contrib.auth import authenticate, login from captcha.models import CaptchaStore from captcha.helpers import captcha_image_url



