71-django-Auth模塊、BBS項目開發之項目開發流程、表設計

今日內容概要

  • Auth模塊java

    只要是跟用戶相關的登錄、註冊、校驗、修改密碼、註銷、驗證用戶是否登錄python

  • BBS(仿博客園小做業)程序員

    項目開發流程redis

    表設計(七張表)mongodb

    大家回去以後好好的把這七張關係捋一捋數據庫

今日內容詳細

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='123@qq.com',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 """
相關文章
相關標籤/搜索