一 Auth模块
其实我们在创建好一个django项目之后直接执行数据库迁移命令会自动生成很多表列如:
django_session
auth_user
...
django在启动之后就可以直接访问admin路由,需要输入用户名和密码,数据参考的就是auth_user表,并且还必须是管理员用户才能进入
1.1 命令创建超级管理员
python3 manage.py createsuperuser
1.2依赖于auth_user表完成用户相关的所有功能
方法总结
# 1.比对用户名和密码是否正确 user_obj = auth.authenticate(request,username=username,password=password) # 括号内必须同时传入用户名和密码 print(user_obj) # 用户对象 jason 数据不符合则返回None print(user_obj.username) # jason print(user_obj.password) # 密文 # 2.保存用户状态 auth.login(request,user_obj) # 类似于request.session[key] = user_obj # 主要执行了该方法 你就可以在任何地方通过request.user获取到当前登陆的用户对象 # 3.判断当前用户是否登陆 request.user.is_authenticated() # 4.获取当前登陆用户 request.user # 5.校验用户是否登陆装饰器 from django.contrib.auth.decorators import login_required # 局部配置 @login_required(login_url=‘/login/‘) # 全局配置 LOGIN_URL = ‘/login/‘ 1.如果局部和全局都有 该听谁的? 局部 > 全局 2.局部和全局哪个好呢? 全局的好处在于无需重复写代码 但是跳转的页面却很单一 局部的好处在于不同的视图函数在用户没有登陆的情况下可以跳转到不同的页面 # 6.比对原密码 request.user.check_password(old_password) # 7.修改密码 request.user.set_password(new_password) # 仅仅是在修改对象的属性 request.user.save() # 这一步才是真正的操作数据库 # 8.注销 auth.logout(request) # 9.注册 # 操作auth_user表写入数据 User.objects.create(username=username,password=password) # 写入数据 不能用create 密码没有加密处理 # 创建普通用户 User.objects.create_user(username=username,password=password) # 创建超级用户(了解):使用代码创建超级用户 邮箱是必填的 而用命令创建则可以不填 User.objects.create_superuser(username=username,email=‘123@qq.com‘,password=password)
1.3 如何扩展auth_user表
1.创建models,继承AbstractUse
如果继承了AbstractUser,那么在执行数据库迁移命令的时候auth_user表就不会再创建出来了,而UserInfo表中会出现auth_user所有的字段外加自己扩展的字段,
这么做的好处在于你能够直接点击你自己的表更加快速的完成操作及扩展
from django.db import models from django.contrib.auth.models import User,AbstractUser # Create your models here. # 第一种:一对一关系 不推荐 # class UserDetail(models.Model): # phone = models.BigIntegerField() # user = models.OneToOneField(to=‘User‘) # 第二种:面向对象的继承 class UserInfo(AbstractUser): phone = models.BigIntegerField() """ 前提: 1.在继承之前没有执行过数据库迁移命令 auth_user没有被创建,如果当前库已经创建了那么你就重新换一个库 2.继承的类里面不要覆盖AbstractUser里面的字段名 表里面有的字段都不要动,只扩展额外字段即可 """
2.需要在配置文件中告诉django你要用UserInfo替代auth_user(******)
AUTH_USER_MODEL = ‘Myapp.UserInfo‘ ‘应用名.表名‘
3.生成与执行迁移,得到如下表:
makemigrations
migrate
4.你如果自己写表替代了auth_user那么,auth模块的功能还是照常使用,参考的表页由原来的auth_user变成了UserInfo
之后直接调用自定义继承表即 form app01 import models 直接使用Auth方法操作即可
bbs项目开发流程 回到顶部
2.1流程
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.其他...
2.2表设计 回到顶部
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 """