admin管理站点

创建一个管理员用户

python manage.py createsuperuser,按提示输入用户名、邮箱、密码

启动服务器,通过“127.0.0.1:8000/admin”访问,输入上面创建的用户名、密码完成登录

进入管理站点,默认可以对groups、users进行管理

管理界面本地化

编辑settings.py文件,设置编码、时区

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)

刷新管理页面,可以对数据表中数据进行增删改查操作

自定义管理页面

Django提供了admin.ModelAdmin类

通过定义ModelAdmin的子类,来定义模型在Admin界面的显示方式

列表页属性

list_display:显示字段,可以点击列头进行排序

list_filter:过滤字段,过滤框会出现在右侧

search_fields:搜索字段,搜索框会出现在上侧

list_per_page:分页,分页框会出现在下侧

添加、修改页属性

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系统

User用户

创建用户:

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:
    # 这个用户存在数据库中
else:
    # 这个用户没有存在这个数据库中

登录

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):
    ...

如果没有登录成功,会跳转到settings.LOGIN_URL指定的URL中。否则,直接执行函数中的内容。

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

访问权限的方式:appname+.+权限名称。

Group模型

  • 所属包django.contrib.auth.models.Group

  • 创建Group:必须传一个name参数进去。

  • Group操作:

    group.permissions.set([permission_list])
    group.permissions.add(permission, permission, ...)
    group.permissions.remove(permission, permission, ...)
    group.permissions.clear()

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,701评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,649评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,037评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,994评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,018评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,796评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,481评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,370评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,868评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,014评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,153评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,832评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,494评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,039评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,156评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,437评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,131评论 2 356

推荐阅读更多精彩内容

  • 经过对django的初步学习,我们已经对后台的基本流程以及django的运作有了一定的了解,但是这还不足够,dja...
    coder_ben阅读 3,832评论 8 34
  • django——重写用户模型 Django内建的User模型可能不适合某些类型的项目。例如,在某些网站上使用邮件地...
    常大鹏阅读 26,317评论 2 29
  • cms_project 项目,自定义用户和相关权限设置 1.重写用户模型 1.1 修改配置文件,覆盖默认的User...
    常大鹏阅读 25,853评论 1 26
  • 本来周末想完成周五没有完成的工作的,但由于周五走的太急,没完成的工作忘记拷下来…虽然不是多大的事情,但我觉得有点工...
    安_655a阅读 182评论 0 0
  • 终于到了周末,表哥要来我家玩了,我很激动,因为表哥一来,我们就可以玩电脑游戏。 晚上,我们打开电脑,正...
    墨迹的美阅读 156评论 0 0