auth系統的登入註冊和權限控制

auth系統的登入註冊和權限控制

創建一個管理員用戶管理站點

打入命令python manage.py createsuperuser,按照提示輸入。

注意:必須在該虛擬環境中進行操作。同時要在項目的目錄下運行。

管理admin界面

在settings中:

  1. 找到LANGUAGE_CODE = ‘zh-hans’ 這個是控制將頁面上的英文轉化成中文。
  2. 找到TIME_ZONE = 'ASIA/Shanghai’將時區更改
向admin註冊模型
from django.contrib import admin
# Register your models here.
from .models import Department,Student,Course#這裏是導入已有的模型
#在register中註冊已有的模塊
admin.site.register(Department)
admin.site.register(Student)
admin.site.register(Course)

這樣就可以在網頁中直接對數據進行操作

自定義管理頁面

Django提供了admin.ModelAdmin

通過定義ModelAdmin的子類,來定義模型在Admin界面的顯示方式

列表頁屬性

list_display:顯示字段,可以點擊列頭進行排序

list_filter:過濾字段,過濾框會出現在右側

search_fields:搜索字段,搜索框會出現在上側

list_per_page:分頁,分頁框會出現在下側

添加、修改頁屬性

fields:屬性的先後順序

fieldsets:屬性分組

注意:上面兩個屬性,二者選一。

這個是模型的代碼

class Department(models.Model):
    d_id = models.AutoField(primary_key=True)
    d_name = models.CharField(max_length=30)
    def __str__(self):
        return 'Department<d_id=%s,d_name=%s>'%(
            self.d_id,self.d_name
        )

class Student(models.Model):
    s_id = models.AutoField(primary_key=True)
    s_name = models.CharField(max_length=30)
    department = models.ForeignKey('Department')
    course = models.ManyToManyField('Course')
    def __str__(self):
        return 'Student<s_id=%s,s_name=%s>'%(
            self.s_id,self.s_name
        )


class Course(models.Model):
    c_id = models.AutoField(primary_key=True)
    c_name = models.CharField(max_length=30)
    def __str__(self):
        return 'Course<c_id=%s,c_name=%s>'%(
            self.c_id,self.c_name
        )

對模型註冊後臺的顯示格式

  1. 創建對應的類

    from .models import Department,Student,Course
    
    class DepartmentAdimin(admin.ModelAdmin):
        list_display = ['d_id','d_name']#分別顯示它的id和部門名字
        list_display_links = ['d_id','d_name']#設置字段可以點擊進入編輯界面
        list_filter = ['d_id']#過濾框,會出現在右側。
        search_fields = ['d_name']#加入搜索框
    
    class StudentAdimin(admin.ModelAdmin):
        list_display = ['s_id','s_name']
        list_display_links = ['s_id','s_name']
        # fields = ['s_name','course','department']
        fieldsets = [
            ('一組',{'fields':['s_name']}),
            ('二組',{'fields':['department','course']})
        ]
    
    class CourseAdmin(admin.ModelAdmin):
        list_display = ['c_id','c_name']
        list_display_links = ['c_id','c_name']
        list_per_page = 5

    1. 讓格式起作用必須要繼承以上的類
admin.site.register(Department,DepartmentAdimin)
admin.site.register(Student,StudentAdimin)
admin.site.register(Course,CourseAdmin)
User用戶創建
from django.contrib.auth.models import User
User.objects.create_user(username=username,password=password,email=email)#這個就是用auth創建一個用戶,這是一個內置表。
驗證用戶的存在
from django.contrib.auth import authenticate
user = authenticate(username=username,password=password)#這個就是驗證系統
if user is not None:
    # 這個用戶存在
else:
    # 這個用戶不存在
加上上面的驗證代碼,下面是實現基本的登入
from django.contrib.auth import authenticate, login

def my_view(request):
    username = request.POST['username']#獲取請求裏面的數據
    password = request.POST['password']
    user = authenticate(username=username, password=password)
    if user is not None:#查看數據庫中是否存在該用戶信息
        if user.is_active:
            login(request, user)#保存用戶的登入狀態
            # 登錄成功
        else:
            # 用戶沒有被激活,不能登錄
    else:
        # 用戶名或者密碼錯誤
退出功能
from django.contrib.auth import logout
  
  def logout_view(request):
      logout(request)#將該用戶的session清除。
用戶至上

在用戶沒有登入成功時,用戶肯定不想看到一個404的報錯頁面,而是其它他能看的懂得提示頁面

下面的操作可以提供舒適

login_required裝飾器,可以讓頁面自動跳轉。

from django.contrib.auth.decorators import login_required

@login_required#驗證登入裝飾器
def auto_view(request):
    return 後面是要渲染的頁面

在settings裏面設置屬性

LOGIN_URL ="/appname/視圖名字"這個就是,當用戶訪問沒有權限的網站的時候,就會自動的跳轉的這個路徑上去。

這裏存在的問題

不同的用戶設置不同的權限又怎麼實現呢?

下面,給用戶設置門檻,也就是裝飾器

裝飾器總結:

  1. login_required設置登入驗證
  2. permission_required設置權限驗證

權限的設置,在數據庫中的auth_permissions中詳細記錄。在mysql中打入你連接的數據庫,輸入show tables; ,然後再輸入 select ✳ from auth_permissions;查看權限設置

ex:

權限判斷

from django.contrib.auth.decorators import permission_requred
from django.http import HttpResponse
def pems_add(request)#給用戶添加權限
    user = User.object.filter(name = "")#先獲取到對象
    pems = Permission.objects.filter(codename = "權限名")#獲取權限
    user.user_permissions.add(pems)#添加權限 
    return HttpResponse("權限註冊成功")
@permission_required("appname.codename")#這個是驗證權限
def add(request):#只有擁有添加權限的用戶才能調用此視圖函數
    pass
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章