Django

admin后台篇

一、创建一个管理员用户

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

打开settings.py,改成下面那样

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

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

三、自定义管理页面

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

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

  


auth权限篇 

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

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

二、用户User操作

(一).验证用户

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

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

Ps: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

三、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 BlogMoModel',
        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

四、Group模型

(一).导包

django.contrib.auth.models.Group

(二).创建Group

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

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

(三).示例

group.permissions.set([permission_list])
group.permissions.add(permission, permission, ...)
group.permissions.remove(permission, permission, ...)
group.permissions.clear()
View Code
原文地址:https://www.cnblogs.com/quanquan616/p/9155586.html