admin管理站點

創(chuàng)建一個管理員用戶

python manage.py createsuperuser,按提示輸入用戶名、郵箱、密碼

啟動服務(wù)器,通過“127.0.0.1:8000/admin”訪問,輸入上面創(chuàng)建的用戶名、密碼完成登錄

進(jìn)入管理站點,默認(rèn)可以對groups、users進(jìn)行管理

管理界面本地化

編輯settings.py文件,設(shè)置編碼、時區(qū)

LANGUAGE_CODE = 'zh-Hans'
TIME_ZONE = 'Asia/Shanghai'

向admin注冊模型

#----------admin.py---------
from django.contrib import admin
# Register your models here.
from .models import Department,Student,Course

admin.site.register(Department)
admin.site.register(Student)
admin.site.register(Course)

刷新管理頁面,可以對數(shù)據(jù)表中數(shù)據(jù)進(jìn)行增刪改查操作

自定義管理頁面

Django提供了admin.ModelAdmin類

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

列表頁屬性

list_display:顯示字段,可以點擊列頭進(jìn)行排序

list_filter:過濾字段,過濾框會出現(xiàn)在右側(cè)

search_fields:搜索字段,搜索框會出現(xiàn)在上側(cè)

list_per_page:分頁,分頁框會出現(xiàn)在下側(cè)

添加、修改頁屬性

fields:屬性的先后順序

fieldsets:屬性分組

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

例子

#-----models.py------
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
        )

# -----------admin.py--------
from django.contrib import admin

# Register your models here.
from .models import Department,Student,Course

class DepartmentAdimin(admin.ModelAdmin):
    list_display = ['d_id','d_name']
    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

admin.site.register(Department,DepartmentAdimin)
admin.site.register(Student,StudentAdimin)
admin.site.register(Course,CourseAdmin)

auth系統(tǒng)

User用戶

創(chuàng)建用戶:

from django.contrib.auth.models import User
User.objects.create_user(username=username,password=password,email=email)

驗證用戶:

from django.contrib.auth import authenticate
user = authenticate(username=username,password=password)
if user is not None:
    # 這個用戶存在數(shù)據(jù)庫中
else:
    # 這個用戶沒有存在這個數(shù)據(jù)庫中

登錄

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信息將被清除掉。

login_required裝飾器

from django.contrib.auth.decorators import login_required

@login_required
def my_view(request):
    ...

如果沒有登錄成功,會跳轉(zhuǎn)到settings.LOGIN_URL指定的URL中。否則,直接執(zhí)行函數(shù)中的內(nèi)容。

User模型常用屬性和方法

  • username:用戶名。
  • email:郵箱。
  • groups:多對多的組。
  • user_permissions:多對多的用戶權(quán)限。
  • is_staff: 是否是admin的管理員。
  • is_active: 是否激活,判斷該用戶是否可用。
  • is_superuser: 是否是超級用戶。
  • last_login: 上次登錄時間。
  • date_joined: 注冊時間。
  • is_authenticated: 是否驗證通過了。
  • is_anonymous:是否是匿名用戶。
  • set_password(raw_password): 設(shè)置密碼,傳原生密碼進(jìn)去。
  • check_password(raw_password): 檢查密碼。
  • has_perm(perm): 判斷用戶是否有某個權(quán)限。
  • has_perms(perm_list): 判斷用戶是否有權(quán)限列表中的某個列表

Permission權(quán)限模型

在模型中添加權(quán)限

from django.db import models

class BlogModel(models.Model):
    id = models.AutoField(primary_key=True)
    title = models.CharField(max_length=100,blank=True)
    content = models.TextField()

    class Meta:
        permissions = (
            ('watch_article', u'查看文章的權(quán)限'),
            ('update_article', u'修改文章的權(quán)限'),
            ('delete_article', u'刪除文章的權(quán)限'),
            ('add_article', u'發(fā)布文章的權(quán)限'),
        )

在代碼中添加權(quán)限

from django.contrib.auth.models import Permission
from django.contrib.contenttypes.models import ContentType
def test(request):
    content_type = ContentType.objects.get_for_model(BlogModel)
    permission = Permission.objects.create(
        codename='can_publish',
        name='Can Publish BlogMoModel',
        content_type=content_type,
    )
    permission.save()
    return HttpResponse('success')

用戶權(quán)限操作

myuser.user_permissions.set([permission_list])
myuser.user_permissions.add(permission, permission, ...)
myuser.user_permissions.remove(permission, permission, ...)
myuser.user_permissions.clear()
myuser.has_perm('foo.add_bar')

訪問權(quán)限的方式:appname+.+權(quán)限名稱。

Group模型

  • 所屬包django.contrib.auth.models.Group

  • 創(chuàng)建Group:必須傳一個name參數(shù)進(jìn)去。

  • Group操作:

    group.permissions.set([permission_list])
    group.permissions.add(permission, permission, ...)
    group.permissions.remove(permission, permission, ...)
    group.permissions.clear()

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 經(jīng)過對django的初步學(xué)習(xí),我們已經(jīng)對后臺的基本流程以及django的運作有了一定的了解,但是這還不足夠,dja...
    coder_ben閱讀 3,953評論 8 34
  • django——重寫用戶模型 Django內(nèi)建的User模型可能不適合某些類型的項目。例如,在某些網(wǎng)站上使用郵件地...
    常大鵬閱讀 26,537評論 2 29
  • cms_project 項目,自定義用戶和相關(guān)權(quán)限設(shè)置 1.重寫用戶模型 1.1 修改配置文件,覆蓋默認(rèn)的User...
    常大鵬閱讀 25,974評論 1 26
  • 本來周末想完成周五沒有完成的工作的,但由于周五走的太急,沒完成的工作忘記拷下來…雖然不是多大的事情,但我覺得有點工...
    安_655a閱讀 200評論 0 0
  • 終于到了周末,表哥要來我家玩了,我很激動,因為表哥一來,我們就可以玩電腦游戲。 晚上,我們打開電腦,正...
    墨跡的美閱讀 175評論 0 0

友情鏈接更多精彩內(nèi)容