[py][mx]django项目-让系统用自定义的users表认证
项目开端
参考的是mxonline项目
先把这两项完成
- 1.app设计
- 2.app的models的设计
经过分析系统有四个模块
users - 用户管理
course - 课程管理
oranization - 授课教师&授课机构
operation - 用户操作管理
一般系统都先设计用户模块, 把较为独立的模块也放在users模块
先设计user模块
- 用户详情里的字段有
image
nick_name
gender
brith
mobile
address
django默认自带用户表的字段无法满足,因此需要继承它并做扩展,让系统用我们继承过来的.
完成项目初始化
- 创建项目
- 创建app users
- 写models修改认证表为自己的表
users/models.py
- 其中birthday字段类型是DateField
- gender是choices形式
- image头像是ImageField类型,并设置默认头像
- 修改表字段名称显示verbose_name
- 修改表名显示Meta
- 这里继承AbstractUser表, 可以查看AbstractUser类,里面的字段正是系统默认的
import django.contrib.auth.models import AbstractUser # 定义了django默认的model
class UserProfile(AbstractUser):
image = models.ImageField(upload_to="image/%Y/%m", default="image/default.png", max_length=100)
nick_name = models.CharField(max_length=50, verbose_name="昵称", default="")
gender = models.CharField(max_length=5, choices=(("male", "男"), ("female", "女")), default="female")
birthday = models.DateField(verbose_name="生日", null=True, blank=True)
mobile = models.CharField(max_length=11, verbose_name="手机", null=True, blank=True)
address = models.CharField(max_length=50, verbose_name="地址", default="")
class Meta:
verbose_name = "用户信息"
verbose_name_plural = verbose_name
def __str__(self):
return self.username
- 修改settings.py,让django使用我们扩展的表.
app名字.对应model的class名
AUTH_USER_MODEL = "users.UserProfile"
- 同步数据库,观察users表

循环引用问题
- 已经确定4个模块
users
courses
organization
operation
- 循环引用
users: 用户课程 有这个字段
courses: 课程评论 有这个字段
彼此又要互相引用
user 外键 课程评论
courses 外键 用户课程
会造成循环引用问题,利用model分层设计解决
- model分层设计: 防止循环引用
3者之间的共同关系通过operation model来关联.
operation
___________|____________
| | |
users courses organization
邮箱验证码和广告条的model设计
users/models.py
- 较底层的model都放到users模型当中,如邮箱验证码,和广告条较为独立
- send_type是选择类型
- 发送邮件有时间,注意是datetime.now,发送时系统时间.没括号
- 轮播图需要地址URLField类型和前后顺序IntegerField
class EmailVerifyRecord(models.Model):
code = models.CharField(max_length=10, verbose_name="验证码")
email = models.EmailField(max_length=50, verbose_name="邮箱")
send_type = models.CharField(choices=(("register", "注册"), ("forget", "忘记密码")), max_length=10)
send_time = models.DateTimeField(default=datetime.now)
class Meta:
verbose_name = "邮箱验证码"
verbose_name_plural = verbose_name
class Banner(models.Model):
title = models.CharField(max_length=100, verbose_name="标题")
image = models.ImageField(upload_to="banner/%Y/%m", verbose_name="轮播图")
url = models.URLField(max_length=200, verbose_name="访问地址")
index = models.IntegerField(default=200, verbose_name="顺序")
add_time = models.DateTimeField(default=datetime.now, verbose_name="添加时间")
class Meta:
verbose_name = "轮播图"
verbose_name_plural = verbose_name
表的字段小结
userprofile:
image
nickname
gender
tel
address
emailrecord:
code
email
send_type
send_time
banner:
name
url
index
add_time
[py][mx]django项目-让系统用自定义的users表认证的更多相关文章
- [py][mx]django自定义认证类-实现邮箱作为用户名登录
创建自定义验证用户名密码类CustomBackend users/views.py from django.contrib.auth import authenticate, login from d ...
- [py][mx]django form验证-给db减压
django form认证-解压db压力 一般系统都需要前后端都验证 前端验证容器逃逸破解,如通过js console口去发 试想如果后端只有db验证,那么前端无论发什么后端都查询一次db,对db压力 ...
- [py][mx]django处理登录逻辑
浏览器同源策略(same-origin policy) csrf攻击防御核心点总结 django的cookie和session操作-7天免登录 flask操作cookie&django的see ...
- [py][mx]django课程页显示city和机构封面图
city和课程机构信息展示到前台去 organization/views.py from django.views.generic.base import View from organization ...
- [py][mx]django模板继承-课程列表页
课程列表页分析 1,机构类型 2,所在地区 3.排序 学习人数 先分析下 纵观页面,页头页脚都一样. django提供了模板继承. 至少 不同页面的title 面包屑路径 content内容不一致,以 ...
- [py][mx]django使用class写views-免去判断方法的烦恼
修改views使用class模式 类模式写views - 免去了函数模式的判断的烦恼 users/views.py from django.views.generic import View clas ...
- [py][mx]django xadmin后台配置
xadmin配置 - 安装 pip install -r https://github.com/sshwsfc/xadmin/blob/django2/requirements.txt 以下被我测试通 ...
- Django项目打分系统
Django项目之个人网站 关注公众号"轻松学编程"了解更多. Github地址:https://github.com/liangdongchang/MyWeb.git 感兴趣的可 ...
- [py][mx]django自带后台系统使用
django的manytomany字段和后台搜索过滤功能 后台开发一般要求 后台要求能快速搭建, 主要精力放在前端用户系统开发上. 权限管理 少量样式 快速开发 django自带的后台手动注册模型 创 ...
随机推荐
- 小北微信小程序之小白教程系列之 -- 样式(WXSS)
为了适应广大的前端开发者,WXSS 具有 CSS 大部分 特性.同时为了更适合开发微信小程序,WXSS 对 CSS 进行了扩充以及修改.与 CSS 相比,WXSS 扩展的特性有:尺寸单位和样式导入. ...
- 修改计算机名或IP后Oracle10g无法启动服务的解决办法
修改计算机名或IP后Oracle10g无法启动服务的解决办法 遇到的问题,问题产生原因不详.症状为,windows服务中有一项oracle服务启动不了,报出如下错误. Windows 不能在 本地计算 ...
- Delphi应用程序的调试(六)步进式代码调试
步进式代码调试(Stepping Through Your Code) 步进式代码调试是最基本的调试操作之一,但仍要在此讲述.人们常常容易犯只见树木不见森林的错误.经常复习基本的知识有助于读者了解以前 ...
- Geoserver
Geoserver是一个功能齐全,遵循OGC开放标准的开源WFS-T和WMS服务器.利用Geoserver可以把数据作为maps/images来发布(利用WMS来实现)也可以直接发布实际的数据(利用W ...
- jQuery Sizzle选择器(三)
在Sizzle的入口方法Sizzle()中看到的一个根据浏览器来初始化document各个方法的函数setDocument(),接下来主要看一下这个方法都做了什么. 但之前有必要看一下它用到的一些Si ...
- 【STL】vector的insert方法详解
#include<vector> #include<iostream> using namespace std; int main() { vector<int> ...
- svn和git的优缺点
git官网api: https://git-scm.com/docs 一. 集中式vs分布式 1. Subversion属于集中式的版本控制系统集中式的版本控制系统都有一个单一的集中管理的服务器,保存 ...
- Git - Pull Request工作流
Pull Requests是Bitbucket上方便开发者之间协作的功能.提供了一个用户友好的Web界面,在集成提交的变更到正式项目前可以对变更进行讨论. 开发者向团队成员通知功能开发已经完成,Pul ...
- 7.18 进程池方式的 socket
2018-7-18 22:05:28 笔记都做完了 睡觉睡觉!!!明天早起!发现python慢慢深入变得很强大,很好玩!!! 进程池版本的socket 更加优化了,比多进程版本的效率更高 seerv ...
- [LintCode] Find the Missing Number 寻找丢失的数字
Given an array contains N numbers of 0 .. N, find which number doesn't exist in the array. Example G ...