day71-Auth模塊,BBS小做業初始

Auth模塊

"""
其實咱們在建立好一個django項目以後直接執行數據庫遷移命令會自動生成不少表
    django_session
    auth_user
django在啓動以後就能夠直接訪問admin路由,須要輸入用戶名和密碼,數據參考的就是auth_user表,而且還必須是管理員用戶才能進入

建立超級用戶(管理員)
    python3 manage.py createsuperuser
    
依賴於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)

如何擴展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做業用戶表就是用的上述方式
"""

項目開發流程

# 1.需求分析
    架構師+產品經理+開發者組長
      在跟客戶談需求以前,會大體先了解客戶的需求,而後本身先設計一套比較好寫方案
      在跟客戶溝通交流中引導客戶往咱們以前想好的方案上面靠
      造成一個初步的方案
 
# 2.項目設計
    架構師乾的活
      編程語言選擇
    框架選擇
    數據庫選擇
        主庫:MySQL,postgreSQL,...
      緩存數據庫:redis、mongodb、memcache...
    功能劃分
        將整個項目劃分紅幾個功能模塊
    找組長開會
        給每一個組分發任務
       項目報價
        技術這塊須要多少人,多少天(一個程序員一天1500~2000計算(大體))
      產品經理公司層面 再加點錢
          公司財務簽字確認
        公司老闆簽字確認
      產品經理去跟客戶溝通
         
      後續須要加功能 繼續加錢

# 3.分組開發
    組長找組員開會,安排各自功能模塊
  咱們其實就是在架構師設計好的框架裏面填寫代碼而已(碼畜)
  
  咱們在寫代碼的時候 寫完須要本身先測試是否有bug
  若是是一些顯而易見的bug,你沒有避免而是直接交給了測試部門測出來
  那你可能就須要被扣績效了(必定要跟測試小姐姐搞好關係)
      薪資組成    15K(合理合規合法的避稅)
        底薪    10K
      績效    3K
      崗位津貼 1K
      生活補貼 1K
      
# 4.測試
    測試部門測試你的代碼
      壓力測試
    ...
# 5.交付上線
    1.交給對方的運維人員
  2.直接上線到咱們的服務器上 收取維護費用
  3.其餘...

  

表設計

"""
一個項目中最最最重要的不是業務邏輯的書寫
而是前期的表設計,只要將表設計好了,後續的功能書寫纔會一路順風

bbs表設計
    1.用戶表
        繼承AbstractUser
        擴展
            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纔是
        
    根評論與子評論是一對多的關係
    
        
"""
相關文章
相關標籤/搜索