zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    2016年第七届蓝桥杯C/C++ A组国赛 —— 第一题:随意组合
    寻找段落
    攻击火星
    图论入门
    实数加法
    求 10000 以内 n 的阶乘
    大整数因子
    计算2的N次方
    大整数减法
    大整数加法
  • 原文地址:https://www.cnblogs.com/quanquan616/p/9155586.html
Copyright © 2011-2022 走看看