admin后台篇
一、创建一个管理员用户
(1).设置时区、语言(可选步骤)
打开settings.py,改成下面那样
LANGUAGE_CODE = 'zh-Hans' TIME_ZONE = 'Asia/Shanghai'
(2).执行命令python manage.py createsuperuser
(3).按提示输入用户名、邮箱、密码(密码至少需要8位)
(4).启动服务,访问 127.0.0.1:8000/admin 即可进入站点管理
二、向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)
三、自定义管理页面
Django提供了admin.ModelAdmin类通过定义ModelAdmin的子类,来定义模型在Admin界面的显示方式
(一).列表页属性
(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 )
(2).在该模型的app中的admin.py
# -----------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'] 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权限篇
一、使用视图方式创建一个超级用户
from django.contrib.auth.models import User User.objects.create_user(username="yyyyyy",password="yyyyyy",email="xxx@yyy.zzz")
二、用户User操作
(一).验证用户
不需要再用之前的filter().first()方式了,直接用django封装好的authenticate()
from django.contrib.auth import authenticate user = authenticate(username=username,password=password)
Ps:authenticate这个单词的本意就是“证明…是真实的”
(二).保持登录状态
接上面(一)的验证代码,使用django的login(request,user)
if user is not None: if user.is_active: login(request, user) # 登录成功 else: # 用户没有被激活,不能登录 else: # 用户名或者密码错误
Ps:request这个参数必须写上
(三).注销
直接logout(request)
from django.contrib.auth import logout def logout_view(request): logout(request) # 注销这个用户。他的session信息将被清除掉。
(四).操作前的验证判断
比如说,购买之前必须要登录,没有登录就不能购买。那么就用django自带的装饰器,装饰一下。
在具体的某个视图函数上面加上装饰器,例:
from django.contrib.auth.decorators import login_required @login_required # 这是一个装饰器 def my_view(request): ...
这样之后,操作这个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): 判断用户是否有权限列表中的某个列表
三、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'发布文章的权限'), )
(二).在代码中添加权限
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')
(三).用户权限操作
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')
四、Group模型
(一).导包
django.contrib.auth.models.Group
(二).创建Group
g1 = Group.objects.create(name="user_can_write_blog") g1.save()
注意:必须传一个name参数进去
(三).示例
group.permissions.set([permission_list])
group.permissions.add(permission, permission, ...)
group.permissions.remove(permission, permission, ...)
group.permissions.clear()