創(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()