Django - admin后台、auth权限

admin后台python

1、建立一个管理员用户django

(1).设置时区、语言(可选步骤)session

打开settings.py,改为下面那样app

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

(2).执行命令python manage.py createsuperuseride

(3).按提示输入用户名、邮箱、密码(密码至少须要8位)函数

(4).启动服务,访问 127.0.0.1:8000/admin 便可进入站点管理ui

 

2、向admin注册模型spa

#----------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)
View Code

3、自定义管理页面code

Django提供了admin.ModelAdmin类经过定义ModelAdmin的子类,来定义模型在Admin界面的显示方式blog

(一).列表页属性

(1).list_display:显示字段,能够点击列头进行排序

(2).list_filter:过滤字段,过滤框会出如今右侧

(3).search_fields:搜索字段,搜索框会出如今上侧

(4).list_per_page:分页,分页框会出如今下侧

(二).示例

(1).先写好模型

#-----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 )
View Code

(2).在该模型的app中的admin.py

# -----------admin.py--------
from django.contrib import admin 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'] 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)
View Code

auth权限

1、使用视图方式建立一个超级用户

from django.contrib.auth.models import User User.objects.create_user(username="yyyyyy",password="yyyyyy",email="xxx@yyy.com")
View Code

2、用户User操做

(一).验证用户

不须要再用以前的filter().first()方式了,直接用django封装好的authenticate()

from django.contrib.auth import authenticate user = authenticate(username=username,password=password)
View Code

authenticate这个单词的本意就是“证实…是真实的”

(二).保持登陆状态

接上面(一)的验证代码,使用django的login(request,user)

if user is not None: if user.is_active: login(request, user) # 登陆成功
        else: # 用户没有被激活,不能登陆
    else: # 用户名或者密码错误
View Code

Ps:request这个参数必须写上

(三).注销

直接logout(request)

from django.contrib.auth import logout def logout_view(request): logout(request) # 注销这个用户。他的session信息将被清除掉。
View Code

(四).操做前的验证判断

好比说,购买以前必需要登陆,没有登陆就不能购买。那么就用django自带的装饰器,装饰一下。

在具体的某个视图函数上面加上装饰器,例:

from django.contrib.auth.decorators import login_required @login_required # 这是一个装饰器
def my_view(request): ...
View Code

这样以后,操做这个my_view()业务逻辑以前,都会判断下是否有登陆,没有登陆就执行其余操做。

(五).User模型经常使用属性和方法

- username:用户名。 - email:邮箱。 - groups:多对多的组。 - user_permissions:多对多的用户权限。 - is_staff: 是不是admin的管理员。 - is_active: 是否激活,判断该用户是否可用。 - is_superuser: 是不是超级用户。 - last_login: 上次登陆时间。 - date_joined: 注册时间。 - is_authenticated: 是否验证经过了。 - is_anonymous:是不是匿名用户。 - set_password(raw_password): 设置密码,传原生密码进去。 - check_password(raw_password): 检查密码。 - has_perm(perm): 判断用户是否有某个权限。 - has_perms(perm_list): 判断用户是否有权限列表中的某个列表
View Code

3、Permission权限模型

(一).在模型中添加权限

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'查看文章的权限'), ('update_article', u'修改文章的权限'), ('delete_article', u'删除文章的权限'), ('add_article', u'发布文章的权限'), )
View Code

(二).在代码中添加权限

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 BlogModel', content_type=content_type, ) permission.save() return HttpResponse('success')
View Code

(三).用户权限操做

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')
View Code

4、Group模型

(一).导包

django.contrib.auth.models.Group

(二).建立Group

b1 = Group.objects.create(name="user_can_write_blog") b1.save()
View Code

注意:必须传一个name参数进去

(三).示例

group.permissions.set([permission_list]) group.permissions.add(permission, permission, ...) group.permissions.remove(permission, permission, ...) group.permissions.clear()
View Code
相关文章
相关标签/搜索