• 第六章:站点后台管理篇


    1、描述:

       后台管理见面共是站点非常重要的一部分,后台管理是可以控制用户权限,指定一部分具有权限的用户才可以管理维护。

       比如:我们自己的写的博客,只有我们自己登录了才能写自己的博客,当博客写好后发布,其他用户就可以浏览我们的博客,但是不能修改其博客的内容,只能修改自己发布的博客内容。

       但是管理界面有一问题:创建它太繁琐。当你开发对公众的功能时,网页开发是有趣的,但是创建管理界面通常是千篇一律的。你必须认证用户,显示并管理表格,验证输入的有效性诸如此类。这很繁琐而且是重复劳动。

        Django 就改进繁琐和重复缺陷,从可以实现自动管理界面,只要做简单的配置和定制就可以实现,后台管理的功能。

    激活管理界面

    1、配置Models

       在需要设置为被管理这编辑的model 类中设置为Admin类的模式,如果:

    class Author(models.Model):
    salutation=models.CharField(max_length=10)
    first_name=models.CharField(max_length=30)
    last_name=models.CharField(max_length=40)
    email=models.EmailField(max_length=30)
    #headshot = models.ImageField(upload_to='/tmp')
    def __unicode__(self):
    return '%s %s' % (self.first_name, self.last_name)
    #Admin 声明标志了该类是管理界面'''
    class Admin:
    pass

    Admin 之下你可以放很多选项,但目前我们只关注缺省的东西,所以我们只在那写上 pass 让 Python 知道 Admin 类是空的。

    下面我提供Books所以模型类(models.py)完整定制的代码:

     1 # -*- coding:utf-8 -*-
    2 from django.db import models
    3 from django.contrib import admin
    4
    5 class Publisher(models.Model):
    6 name = models.CharField(max_length=30,blank=True)
    7 address = models.CharField(max_length=50)
    8 city = models.CharField(max_length=60)
    9 state_province= models.CharField(max_length=30)
    10 country=models.CharField(max_length=50)
    11 website=models.URLField()
    12 def __unicode__(self):
    13 return self.name
    14 #默认排序设置
    15 #class Meta:
    16 # ordering = ["name"]
    17
    18 #Admin 声明标志了该类有一个管理界面'''
    19 class Admin:
    20 pass
    21
    22 class Author(models.Model):
    23 salutation=models.CharField(max_length=10)
    24 first_name=models.CharField(max_length=30)
    25 last_name=models.CharField(max_length=40)
    26 email=models.EmailField(max_length=30)
    27 #headshot = models.ImageField(upload_to='/tmp')
    28 def __unicode__(self):
    29 return '%s %s' % (self.first_name, self.last_name)
    30 #Admin 声明标志了该类有一个管理界面'''
    31 class Admin:
    32 pass
    33
    34 class Book(models.Model):
    35 title=models.CharField(max_length=100)
    36 authors=models.ManyToManyField(Author)
    37 publisher=models.ForeignKey(Publisher)
    38 publication_date=models.DateField()
    39 num_page =models.IntegerField(blank=True,null=True)
    40
    41 def __unicode__(self):
    42 return 'Book name :%s' % self.title
    43 #Admin 声明标志了该类有一个管理界面'''
    44 class Admin:
    45 list_display = ('title', 'authors', 'publication_date')
    46 list_filter = ('publisher', 'publication_date')
    47 ordering = ('-publication_date',)
    48 search_fields = ('title')
    49
    50 class AuthorAdmin(admin.ModelAdmin):
    51 list_display = ('first_name','last_name','email')
    52 search_fields = ('first_name','last_name')
    53
    54 class PublisherAdmin(admin.ModelAdmin):
    55 list_display = ('name','address','city','state_province','country')
    56 search_fields = ('name','address')
    57
    58
    59 class BookAdmin(admin.ModelAdmin):
    60 list_display = ('title','num_page','publication_date')
    61 search_fields = ('title','num_page')
    62 #list_filter = ('publication_date')#添加过滤器
    63 # 注意
    64 # # 其接受的是字符串,而非元组
    65 # 结果会显示逐层细分的日期过滤
    66 #date_hierarchy = 'publication_date'
    67 #ordering = ('-publication_date') #使用ordering指定默认的排序方式
    68 #fields = ('title','authors','publication_date')#自定义字段显示顺序
    69 #filter_horizontal = ('authors') # 定义多项选择
    70 #raw_id_fields = ('publisher') # 展示成文本框

    2、配置manage.py

      在 INSTALLED_APPS 中添加设置 "django.contrib.admin"

      取消

    "django.contrib.sessions" ,

     "django.contrib.auth" ,

     "django.contrib.contenttypes"

      前面的注释

      添加 'books',配置。

    INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',#打开 Sessions功能
    'django.contrib.admin',
    #'django.contrib.comments',
    #'django.contrib.sites',
    #'django.contrib.messages',
    # 'django.contrib.staticfiles',
    'books',

    # Uncomment the next line to enable the admin:
    # 'django.contrib.admin',
    # Uncomment the next line to enable admin documentation:
    # 'django.contrib.admindocs',
    )

    3、urls.py 配置

    from django.conf.urls.defaults import *
    from django.contrib import admin

    admin.autodiscover()
    urlpatterns = patterns('',
    url(r'^admin/', include(admin.site.urls)),

    )

    4、创建admin.py文件

    在Books文件目录中添加admin.py文件,注册管理模型(ModelAdmin),代码如下:

    # -*- coding:utf-8 -*-
    """""
    * User: lhj588
    * Date: 2011年11月1日
    * Time: 上午11:02
    * Desc:
    """""
    from django.contrib import admin
    from models import AuthorAdmin,PublisherAdmin,BookAdmin
    from books.models import Publisher,Author,Book

    admin.site.register(Publisher, PublisherAdmin)
    admin.site.register(Author, AuthorAdmin) #连同ModelAdmin类注册
    admin.site.register(Book, BookAdmin)

    5、同步数据库

    运行 python manage.py syncdb

    在 INSTALLED_APPS 里有 "django.contrib.auth" 的情况下,当你第一次运行 syncdb 时会被问是不是需要创建超级用户。 如果你在那时不做这个事情,

    需要运行 django/contrib/auth/bin/create_superuser.py 来创建有管理权的用户。否则你不可能登录进管理界面。

    6、重启服务器

    运行 python manage.py runserver 以启动开发服务器

    7、访问测试

    访问http://127.0.0.1:8000/admin/

    如果上面配置有问题,则会出现错误页面,

    如果上面配置没有问题,则直接显示后台登录页面

    登录帐号和密码就是在同步数据库是设置的帐号和密码。

    登录成功后就显示后台管理页面图:

     

    该后台管理页面中就包含了用户权限管理和Books管理,

    A、权限管理

         可以添加、修改、删除用户,角色,

         可以设置用户权限,非常简单能活

    B、Books管理

       添加、修改、删除等操作作者、出版社、图书

       简单配置就是实现后台管理功能,维护Books数据。

     

     

  • 相关阅读:
    BZOJ2208 [Jsoi2010]连通数[缩点/Floyd传递闭包+bitset优化]
    loj515 「LibreOJ β Round #2」贪心只能过样例[bitset+bool背包]
    BZOJ3331 [BeiJing2013]压力[圆方树+树上差分]
    BZOJ4010 [HNOI2015]菜肴制作[拓扑排序+贪心]
    BZOJ2140 稳定婚姻[强连通分量]
    hdu4612 Warm up[边双连通分量缩点+树的直径]
    BZOJ2730 [HNOI2012]矿场搭建[点双连通分量]
    BZOJ3887 [Usaco2015 Jan]Grass Cownoisseur[缩点]
    BZOJ1016 [JSOI2008]最小生成树计数[最小生成树+搜索]
    hdu4786 Fibonacci Tree[最小生成树]【结论题】
  • 原文地址:https://www.cnblogs.com/lhj588/p/2232042.html
Copyright © 2020-2023  润新知