一、Auth模块

1 简介

在我们创建好一个django项目后,我们执行数据库迁移命令会发现自动生成了很多张表django_session,auth_user....

其中auth_user就是用来存储admin路由登录的用户信息,必须是管理员用户才能登陆

创建超级用户(管理员):

​ python manage.py createsuperuser

2 方法总结

# 1 判断用户账号密码是否正确

# 由于密码是密文的,所以不能用普通的数据校验,可以用auth自带的功能校验
# 这个校验方法的返回值是数据对象,不符合返回None
from django.contrib import auth
res = auth.authenticate(username=username,password=password)
res > hz
res.username > hz
res.password > 密文密码 # 2 保存登陆状态 # 会自动把登录状态记录下来表django_session中
# 在这个页面任何位置都能通过request.user去拿到登录的用户数据对象
auth.login(request,res) # 3 判断用户是否登录 # request.user可以拿到当前登录的用户对象,如果没有,返回的是一个匿名用户对象
# 所以还需要进一步判断通过is_authenticated,如果用户存在返回True,如果是匿名用户返回False
request.user.is_authenticated() # 4 登录装饰器 # 登录认证装饰器,参数login_url是如果没有登录跳转到指定页
# 或者可以在全局配置,settins中设置参数LOGIN_URL
# 局部会覆盖全局,全局写的好处:方便 局部写的好处:可以丰富跳转的页面
@login_required(login_url='/login')
@login_required # 5 判断密码是否正确 # 通过check_password方法自动加密判断密码是否一致,得到的是布尔值
is_right =request.user.check_password(old_password) # 6 修改密码 # set_password可以让密码加密保存
# 修改密码后会自动注销
request.user.set_password(new_password)
request.user.save() # 7 注销 auth.logout(request) # 8 注册 # 会自动加密密码,创建的是普通用户
# create_user改成create_superuser就是创建管理员用户
User.objects.create_user(username=username,password=password)

3 如何扩展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):
"""
如果继承了AbstractUser
那么在执行数据库迁移命令的时候auth_user表就不会再创建出来了
而UserInfo表中会出现auth_user所有的字段外加自己扩展的字段
这么做的好处在于你能够直接点击你自己的表更加快速的完成操作及扩展 前提:
1.在继承之前没有执行过数据库迁移命令
auth_user没有被创建,如果当前库已经创建了那么你就重新换一个库
2.继承的类里面不要覆盖AbstractUser里面的字段名
表里面有的字段都不要动,只扩展额外字段即可
3.需要在配置文件中告诉django你要用UserInfo替代auth_user(******)
AUTH_USER_MODEL = 'app01.UserInfo'
'应用名.表名'
"""
phone = models.BigIntegerField() """
你如果自己写表替代了auth_user那么
auth模块的功能还是照常使用,参考的表页由原来的auth_user变成了UserInfo 我们bbs作业用户表就是用的上述方式
"""

二、bbs表介绍

1 项目开发流程

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

2 bbs七张表关系

"""
一个项目中最最最重要的不是业务逻辑的书写
而是前期的表设计,只要将表设计好了,后续的功能书写才会一帆风顺 bbs表设计
1.用户表
继承AbstractUser
要在settins内去替换User表
扩展
phone 电话号码
avatar 用户头像
create_time 创建时间 外键字段
一对一个人站点表 2.个人站点表
site_name 站点名称
site_title 站点标题
site_theme 站点样式 3.文章标签表
name 标签名 外键字段
一对多个人站点 4.文章分类表
name 分类名 外键字段
一对多个人站点 5.文章表
title 文章标题
desc 文章简介
content 文章内容
create_time 发布时间 数据库字段设计优化(******)
(虽然下述的三个字段可以从其他表里面跨表查询计算得出,但是频繁跨表效率)
up_num 点赞数 要去统计点赞点踩表
down_num 点踩数
comment_num 评论数 统计评论表 外键字段
一对多个人站点
多对多文章标签 创建第三张表去对应标签
一对多文章分类 6.点赞点踩表
记录哪个用户给哪篇文章点了赞还是点了踩
user ForeignKey(to="User")
article ForeignKey(to="Article")
is_up BooleanField() 1 1 1
1 2 1
1 3 0
2 1 1 7.文章评论表
记录哪个用户给哪篇文章写了哪些评论内容
user ForeignKey(to="User")
article ForeignKey(to="Article")
content CharField()
comment_time DateField()
# 自关联
文章是否为子评论,如果为空表示是根评论
parent ForeignKey(to="Comment",null=True)
# ORM专门提供的自关联写法
parent ForeignKey(to="self",null=True) id user_id article_id parent_id
1 1 1
2 2 1 1 根评论子评论的概念
根评论就是直接评论当前发布的内容的 子评论是评论别人的评论
1.PHP是世界上最牛逼的语言
1.1 python才是最牛逼的
1.2 java才是 根评论与子评论是一对多的关系 """

day71 django收尾的更多相关文章

  1. day71:drf:API接口&Restful API规范&Django Rest Framework&drf中的序列化和反序列化功能

    目录 1.web应用模式 2.API接口 3.Restful API规范 4.序列化 5.Django Rest Framework 1.drf的简单介绍 2.drf的特点 3.如何安装drf 4.d ...

  2. Django如何设置proxy

    设置porxy的原因 一般情况下我们代理设置是针对与浏览器而言,通常只需在浏览器设置中进行配置,但它只针对浏览器有效,对我们自己编写的程序并任何效果,这时就需要我们在软件编码中加入代理设置. --- ...

  3. 第四章:Django 的模板系统(转)

    在之前的章节中,你可能觉得例子中视图返回文本有点不妥.即是, HTML 是直接写在 Python 代码中的.     这种做法会导致这些问题:     要做任何设计上的更改就必须改写 Python 代 ...

  4. 【转】Django HTTP请求的处理流程

    Django 和其他 Web 框架的 HTTP 处理的流程大致相同,Django 处理一个 Request 的过程是首先通过中间件,然后再通过默认的 URL 方式进行的.我们可以在 Middlewar ...

  5. 【转】对Django框架架构和Request/Response处理流程的分析

    本文转载于疯狂的蚂蚁. 一. 处理过程的核心概念 如下图所示django的总览图,整体上把握以下django的组成: 核心在于中间件middleware,django所有的请求.返回都由中间件来完成. ...

  6. 【Django】request 处理流程(转)

    Django 和其他 Web 框架的 HTTP 处理的流程大致相同,Django 处理一个 Request 的过程是首先通过中间件,然后再通过默认的 URL 方式进行的.我们可以在 Middlewar ...

  7. django面试大全

    1.Django请求的生命周期 a. wsgi, 创建socket服务端,用于接收用户请求并对请求进行初次封装. b. 中间件,对所有请求到来之前,响应之前定制一些操作. c. 路由匹配,在url和视 ...

  8. python的Web框架,Django模板标签及模板的继承

    模板标签 在传递数据的时候,会有大量的数据展示在浏览器上,而数据会是动态变化的,在html的编写中,数据也是需要动态的,而不能是写死的,如果动态展示呢. 给定的例子数据 views传递数据给html ...

  9. 对Django框架架构和Request/Response处理流程的分析(转)

    原文:http://blog.sina.com.cn/s/blog_8a18c33d010182ts.html 一. 处理过程的核心概念 如下图所示django的总览图,整体上把握以下django的组 ...

随机推荐

  1. 小程序-图片/文件本地缓存,减少CDN流量消耗

    写在前面 小程序网络图片读取: 在读取OSS图片CDN分发时流量大量消耗,导致资金费用增加. 网络图片比较大时,图片加载缓慢. 为了尽量减少上面两个问题,所以对已读的图片进行缓存处理,减少多次访问不必 ...

  2. RabbitMQ系列之【CentOS6.5安装RabbitMQ】

    环境准备 操作系统:CentOS 6.5 Final RabbitMQ: 3.1.5 Python: 2.7.11 ErLang: R16B02 安装预环境(少什么安装什么) yum -y insta ...

  3. <Win10开发>一些小知识。

    这篇文章分享一下UWP开发的一些零散的小知识. 1.设置应用的最小尺寸 主要用在PC上,UWA在PC可以被鼠标随意摆弄,可大可小,界面的响应式设计是一大特点.不过有些时候还是要考虑,我们的App界面元 ...

  4. UIPopoverPresentationController的使用

    前言 最近项目中很多地方有一个相同的需求,那就是点击一个按钮的时候在按钮的某一个方向弹出一个视图,这个视图需要带有一个箭头指向,就像下图一样.要实现这个功能,就要用到UIPopoverPresenta ...

  5. 解决Mac上打开txt文件乱码问题

    出处:https://www.jianshu.com/p/f55ddf1e9839 经常会在Mac上打开一个txt文件,发现里面的中文都是乱码,问题是在Windows和手机上看都完全是正常的,这就十分 ...

  6. ViewDragHelper类的基本使用

    在android的开发包android.support.v4.widget中有一个ViewDragHelper类.这个类的作用是帮助我们处理View的拖拽滑动.在一个ViewGroup类的内部定义一个 ...

  7. 浅谈async 及 await

    async 及 await 涉及面试题:async 及 await 的特点,它们的优点和缺点分别是什么?await 原理是什么? 一个函数如果加上 async ,那么该函数就会返回一个 Promise ...

  8. 记一次 CocoaPod 的使用过程

    目前有一个cocos2d creator项目, 接入了微信SDK,  现在需要接入阿里云移动推送. 用到了CocoaPod集成.   于是创建了一个Podfile, (此文件在项目目录中, 和 xxx ...

  9. Linux上TCP的几个内核参数调优

    Linux作为一个强大的操作系统,提供了一系列内核参数供我们进行调优.光TCP的调优参数就有50多个.在和线上问题斗智斗勇的过程中,笔者积累了一些在内网环境应该进行调优的参数.在此分享出来,希望对大家 ...

  10. Windows安装C的编译环境

    对于java开发者来说安装C的编译环境不是非常熟悉,因此本文对C的安装环境进行介绍以及windows编译Redis和Zookeeper的过程.MinGW主要用于按照gcc.make等环境,cywin用 ...