71-django-Auth模块、BBS项目开发之项目开发流程、表设计

今日内容概要

  • Auth模块

    只要是跟用户相关的登陆、注册、校验、修改密码、注销、验证用户是否登陆

  • BBS(仿博客园小作业)

    项目开发流程

    表设计(七张表)

    你们回去之后好好的把这七张关系捋一捋

今日内容详细

Auth模块

 1 """
 2 其实我们在创建好一个django项目之后直接执行数据库迁移命令会自动生成很多表
 3     django_session
 4     auth_user
 5 django在启动之后就可以直接访问admin路由,需要输入用户名和密码,数据参考的就是auth_user表,并且还必须是管理员用户才能进入
 6 
 7 创建超级用户(管理员)
 8     python3 manage.py createsuperuser
 9     
10 依赖于auth_user表完成用户相关的所有功能
11 """

Auth模块方法总结

 1 from django.contrib import auth
 2 
 3 # 1.比对用户名和密码(该方法会自动加密)是否正确
 4 user_obj = auth.authenticate(request,username=username,password=password)
 5 # 括号内必须同时传入用户名和密码
 6 print(user_obj)  # 用户对象  jason   数据不符合则返回None
 7 print(user_obj.username)  # jason
 8 print(user_obj.password)  # 密文
 9 
10 
11 # 2.保存用户状态
12 auth.login(request,user_obj)  # 类似于request.session[key] = user_obj
13 # 主要执行了该方法 你就可以在任何地方通过request.user获取到当前登陆的用户对象
14 
15 
16 # 3.判断当前用户是否登陆
17 request.user.is_authenticated() # 返回布尔值
18 
19 
20 # 4.获取当前登陆用户
21 request.user    # 登陆成功得到用户对象,没有登录AnonymousUser匿名用户
22 # 自动去django_session里面查找对应的用户对象给你封装到request.user中
23 
24 
25 # 5.校验用户是否登陆装饰器
26 from django.contrib.auth.decorators import login_required
27 # 局部配置
28 @login_required(login_url='/login/')  # 局部配置 当用户没有登录让它跳到这个网址
29 # 全局配置
30 LOGIN_URL = '/login/'
31     1.如果局部和全局都有 该听谁的?
32     局部 > 全局
33     2.局部和全局哪个好呢?
34     全局的好处在于无需重复写代码 但是跳转的页面却很单一
35     局部的好处在于不同的视图函数在用户没有登陆的情况下可以跳转到不同的页面
36 
37 
38 # 6.比对原密码
39 request.user.check_password(old_password) # 自动加密 比对密码 返回布尔值
40 
41 
42 # 7.修改密码
43 request.user.set_password(new_password)  # 仅仅是在修改对象的属性
44 request.user.save()  # 这一步才是真正的操作数据库
45 
46 
47 # 8.注销
48 auth.logout(request)   # 类似于request.session.flush()
49 
50 
51 # 9.注册
52 
53 from django.contrib.auth.models import User      # 这就是那张auth_user表
54 
55 # 操作auth_user表写入数据
56 User.objects.create(username=username,password=password)  # 写入数据  不能用create 密码没有加密处理
57 # 创建普通用户
58 User.objects.create_user(username=username,password=password)
59 # 创建超级用户(了解):使用代码创建超级用户 邮箱是必填的 而用命令创建则可以不填
60 User.objects.create_superuser(username=username,email='[email protected]',password=password)

如何扩展auth_user表,添加自定义字段

 1 from django.db import models
 2 from django.contrib.auth.models import User, AbstractUser
 3 # Create your models here.
 4 
 5 # 第一种:利用一对一关系关联新的字段  不推荐
 6 # class UserDetail(models.Model):
 7 #     phone = models.BigIntegerField()
 8 #     user = models.OneToOneField(to='User')
 9 
10 
11 # 第二种:利用面向对象的继承
12 class UserInfo(AbstractUser):
13     """
14     如果继承了AbstractUser
15     那么在执行数据库迁移命令的时候auth_user表就不会再创建出来了
16     而UserInfo表中会出现auth_user所有的字段外加自己扩展的字段
17     这么做的好处在于你能够直接点击你自己的表更加快速的完成操作及扩展
18     
19     前提:
20         1.在继承之前没有执行过数据库迁移命令
21             auth_user没有被创建,如果当前库已经创建了那么你就重新换一个库
22         2.继承的类里面不要覆盖AbstractUser里面的字段名
23             表里面有的字段都不要动,只扩展额外字段即可
24         3.需要在配置文件中告诉django你要用UserInfo替代auth_user(******)
25             AUTH_USER_MODEL = 'app01.UserInfo'
26                                 '应用名.表名'
27     """
28     phone = models.BigIntegerField()
29     
30     
31 """
32 你如果自己写表替代了auth_user那么
33 auth模块的功能还是照常使用,参考的表页由原来的auth_user变成了UserInfo
34  以前用:User.objects.create....   都变成: models.UserInfo.create...
35 
36 我们bbs作业用户表就是用的上述方式
37 """

项目开发流程

 1 # 1.需求分析
 2     架构师+产品经理+开发者组长
 3       在跟客户谈需求之前,会大致先了解客户的需求,然后自己先设计一套比较好写方案
 4       在跟客户沟通交流中引导客户往我们之前想好的方案上面靠
 5       形成一个初步的方案
 6  
 7 # 2.项目设计
 8     架构师干的活
 9       编程语言选择
10     框架选择
11     数据库选择
12         主库:MySQL,postgreSQL,...
13       缓存数据库:redis、mongodb、memcache...
14     功能划分
15         将整个项目划分成几个功能模块
16     找组长开会
17         给每个组分发任务
18        项目报价
19         技术这块需要多少人,多少天(一个程序员一天1500~2000计算(大致))
20       产品经理公司层面 再加点钱
21           公司财务签字确认
22         公司老板签字确认
23       产品经理去跟客户沟通
24          
25       后续需要加功能 继续加钱
26 
27 # 3.分组开发
28     组长找组员开会,安排各自功能模块
29   我们其实就是在架构师设计好的框架里面填写代码而已(码畜)
30   
31   我们在写代码的时候 写完需要自己先测试是否有bug
32   如果是一些显而易见的bug,你没有避免而是直接交给了测试部门测出来
33   那你可能就需要被扣绩效了(一定要跟测试小姐姐搞好关系)
34       薪资组成    15K(合理合规合法的避税)
35         底薪    10K
36       绩效    3K
37       岗位津贴 1K
38       生活补贴 1K
39       
40 # 4.测试
41     测试部门测试你的代码
42       压力测试
43     ...
44 # 5.交付上线
45     1.交给对方的运维人员
46   2.直接上线到我们的服务器上 收取维护费用
47   3.其他...

BBS表设计

 1 """
 2 一个项目中最最最重要的不是业务逻辑的书写
 3 而是前期的表设计,只要将表设计好了,后续的功能书写才会一帆风顺
 4 
 5 bbs表设计
 6     1.用户表
 7         继承AbstractUser
 8         扩展
 9             phone 电话号码
10             avatar  用户头像
11             create_time  创建时间
12         
13         外键字段
14             一对一个人站点表
15     
16     2.个人站点表
17         site_name 站点名称
18         site_title      站点标题
19         site_theme    站点样式
20     
21     3.文章标签表
22         name        标签名
23         
24         外键字段
25             一对多个人站点
26     
27     4.文章分类表
28         name        分类名
29         
30         外键字段
31             一对多个人站点
32     
33     5.文章表
34         title    文章标题
35         desc    文章简介
36         content    文章内容
37         create_time 发布时间
38         
39         数据库字段设计优化(******)
40             (虽然下述的三个字段可以从其他表里面跨表查询计算得出,但是频繁跨表效率)
41         up_num                    点赞数
42         down_num                点踩数
43         comment_num         评论数
44         
45         外键字段
46             一对多个人站点
47             多对多文章标签
48             一对多文章分类
49             
50         
51     
52     6.点赞点踩表
53         记录哪个用户给哪篇文章点了赞还是点了踩
54         user                        ForeignKey(to="User")                
55         article                    ForeignKey(to="Article")    
56         is_up                        BooleanField()
57         
58         1                1                1
59         1                2                1
60         1                3                0
61         2                1                1
62         
63     
64     7.文章评论表
65         记录哪个用户给哪篇文章写了哪些评论内容
66         user                        ForeignKey(to="User")                
67         article                    ForeignKey(to="Article")
68         content                    CharField()
69         comment_time        DateField()
70         # 自关联
71         parent                    ForeignKey(to="Comment",null=True)        
72         # ORM专门提供的自关联写法    
73         parent                    ForeignKey(to="self",null=True)
74         
75     id    user_id            article_id                parent_id
76     1         1                        1                                        
77     2         2                        1                                        1                    
78         
79 根评论子评论的概念
80     根评论就是直接评论当前发布的内容的
81         
82     子评论是评论别人的评论
83         1.PHP是世界上最牛逼的语言
84             1.1 python才是最牛逼的
85                 1.2 java才是
86         
87     根评论与子评论是一对多的关系
88     
89         
90 """

BBS表关系图解

今日测验

1 """
2 1.简述auth模块功能
3 2.简述项目开发流程
4 3.简述bbs表设计
5 """

今日内容回顾

auth模块

 1 """
 2 认证模块
 3     校验用户是否存在
 4     保存用户状态
 5     校验用户是否登陆
 6     修改密码
 7     ...
 8 该模块默认需要用到django默认的auth_user表
 9 
10 django的admin后台管理需要用到该表
11 
12 如何创建超级用户/管理员
13     python3 manage.py createsuperuser
14 """
15 from django.contrib import auth
16 # 1.校验用户名和密码是否正确
17 auth.authenticate(request,username=username,password=password)
18 """注意括号内用户名和密码必须都给才行,该方法有一个返回值 用户对象/None"""
19 # 2.保存用户信息
20 auth.login(request,user_obj)
21 """
22 内部自动帮你操作django_session表 request.session[key] = user_obj
23 该方法执行完毕之后,在任意位置都可以通过request.user获取到当前登陆的用户对象
24 """
25 # 3.判断当前用户是否登陆
26 request.user.is_authenticated()
27 # 4.校验用户是否登陆装饰器
28 from django.contrib.auth.decorators import login_required
29     1.局部配置
30   @login_required(login_url='/login/')
31   2.全局配置
32   LOGIN_URL = '/login/'
33   # 全局省事局部灵活
34 # 5.验证原密码是否正确
35 request.user.check_password(old_password)
36 # 6.修改密码
37 request.user.set_password(new_password)
38 request.user.save()
39 # 7.创建用户
40 from django.contrib.auth.models import User
41 User.objects.create()  # 密码不加密 不用
42 User.objects.create_user()  # 普通用户 经常使用
43 User.objects.create_superuser()  # 超级用户(邮箱必填)
auth模块

如何扩展auth_user表

 1 # 第一种 利用一对一的表关系
 2     不推荐使用,不太方便
 3 # 第二种    利用面向对象继承
 4 from django.contrib.auth.models import AbstractUser
 5 class UserInfo(AbstractUser):
 6   # 扩展auth_user表中没有的字段
 7 """
 8 一定要去配置文件中配置
 9 AUTH_USER_MODEL = '应用名.类名'
10 
11 1.在没有创建auth_user表的前提下才能替代
12     如果已经创建了那就换一个库
13 2.扩展的字段尽量不要与原来的字段冲突
14 3.之前auth模块所有的功能和方法照样可以使用,知识参考的表由原来的变成了UserInfo
15 """
如何扩展auth_user表

项目开发流程

项目开发流程
 1 '''
 2 # 1.需求分析
 3 
 4 # 2.项目设计
 5 
 6 # 3.分组开发
 7 
 8 # 4.测试
 9 
10 # 5.交付上线
11 '''

数据库表设计

 1 """
 2 数据库的表设计是整个项目的重点所在
 3 """
 4 1.用户表
 5 
 6 2.个人站点表
 7 
 8 3.文章标签表
 9 
10 4.文章分类表
11 
12 5.文章表
13     
14   1.数据库字段优化设计
15   点赞数  普通字段
16   点踩数  普通字段
17   评论数  普通字段
18   # 只需要确保后续在操作点赞点踩和评论表的时候同步的将对应的普通字段更新即可
19 
20 6.点赞点踩表
21 
22 7.评论表
23     根评论和子评论
24   to='self'
25   
26 # 7张表之间的关系
数据库表设计

作业

1 """
2 必做题
3     1.整理今日内容至个人博客或笔记中
4     2.创建自己的模型表扩展auth_user表字段,验证auth模块功能方法
5     3.理解bbs表设计及表关系
6     
7 选做题
8     1.创建表并尝试着完成注册功能
9 """

猜你喜欢

转载自www.cnblogs.com/wgwg/p/13079571.html