• django站点管理


    站点管理——超级用户的管理界面,可以让你添加,删除,管理网站内容;

    一、激活管理界面

    1、在settings.py中进行如下配置:

    INSTALLED_APPS = (
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'books',
    )
    
    MIDDLEWARE_CLASSES = (
         'django.contrib.sessions.middleware.SessionMiddleware',
         'django.middleware.common.CommonMiddleware',
         'django.middleware.csrf.CsrfViewMiddleware',
         'django.contrib.auth.middleware.AuthenticationMiddleware',
         'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
         'django.contrib.messages.middleware.MessageMiddleware',
         'django.middleware.clickjacking.XFrameOptionsMiddleware',
         'django.middleware.security.SecurityMiddleware',
    )

    2、运行 python manage.py syncdb,生成管理界面额外的数据库表;(在Django 1.9及未来的版本种使用migrate代替syscdb.即:python manage.py migrate)

    3、运行python manage.py createsuperuser来创建一个admin的用户账号;

    4、配置url

    from django.contrib import admin
    admin.autodiscover()
    
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
    ]

    5、启动服务器并且访问127.0.0.1:8000/admin/,登录之前设定的超级用户名和密码,然后可见:

    6、在 MIDDLEWARE_CLASSES 中的  'django.contrib.sessions.middleware.SessionMiddleware', 之后添加  'django.middleware.locale.LocaleMiddleware',  就可以将页面上的语言类型翻译成你想要的语言,如下;

    7、 接下来你可以根据引导查看、修改、删除、增加一些内容,这里就不一一解释了;接下来呢,我们要将我们的模块添加到管理工具中;上个例子中我们添加了三个模块:Auther,Publisher和Book;在books目录下打开名为admin.py的文件,然后输入以下代码:

    
    
    #    -*- coding:utf-8 -*-

    from django.contrib import admin
    from books.models import Publisher,Author,Book
    # Register your models here.
    
    #通知管理界面为这些模块逐一提供界面
    admin.site.register(Publisher)
    admin.site.register(Author)
    admin.site.register(Book)

     8、启动服务器并且访问127.0.0.1:8000/admin/,并且根据引导查看或操作一些内容:

        

    9、如果我们想将一个字段设为可选(非必填)的,怎么办呢?比如说我们想将Anthor表中的email字段设成这种属性,只需这样做;

    class Author(models.Model):
        first_name = models.CharField(max_length= 30)
        last_name = models.CharField(max_length= 40)
        email = models.EmailField(blank= True) #设为可选,即可为空,其他的选项默认为False,不能为空

     如果你要设置日期型,时间型和数字型等不接受空字符串的数据类型为可选(可以为空)的,那么就可以使用 null=True,以上两种可以一起使用,不过如果你要使用null=True,就要更新数据库;

    10、如果说你觉得django默认的表名不够贴切,你想要改动的话(比如说将Author表中的‘email’字段改变为'e-mail')就可以这样:

    email = models.EmailField(blank= True,verbose_name= 'e-mail')
    或
    email = models.EmailField('e-mail',blank= True)

    后面 这一种方法不适用于MantToManyField和ForeignKey这样的字段,因为他们第一个参数必须是模块类,这样的话就必须显式地使用verbose_name这个参数名称

    11、自定义ModelAdmi类

     比如说我们查看Author表的时候显示为  ;那我们想让email也显示怎么办呢:打开admin.py,并如下修改:

    class AuthorAdmin(admin.ModelAdmin):
        list_display = ('first_name','last_name','email')
    
    #通知管理界面为这些模块逐一提供界面
    admin.site.register(Author,AuthorAdmin)

    刷新得到:

    12、接下来我们在给Author添加一个搜索栏:如下:

    class AuthorAdmin(admin.ModelAdmin):
        list_display = ('first_name','last_name','email')
        search_fields = ('first_name','last_name'

    13、之后,我们来为Book页创建一个过滤器:如下:

    class BookAdmin(admin.ModelAdmin):
        list_display =  ('title','publisher','publication_date')#
        list_filter = ('publication_date',)
    
    admin.site.register(Book,BookAdmin)

     

    接下来,我们就可以在右边的日期过滤器中查看book列表;

    另一种添加时间日期过滤器的方法为: date_hierarchy;如下;

    class BookAdmin(admin.ModelAdmin):
        list_display =  ('title','publisher','publication_date')
        list_filter = ('publication_date',)
        date_hierarchy = 'publication_date'
        ordering = ('-publication_date',)  #排序方式

    过滤器不仅仅适用于日期型,同样适用于其他字段;(布尔值和外键)

    class BookAdmin(admin.ModelAdmin):
        list_display =  ('title','publisher','publication_date')
        list_filter = ('publisher',)
        date_hierarchy = 'publication_date'
        ordering = ('-publication_date',)

    14、接下来我们来实现自定义表单:,首先我们先自定义字段顺序,字段的顺序默认是和模块中定义的顺序一致的;接下来我们对其进行改变:

    class BookAdmin(admin.ModelAdmin):
        list_display =  ('title','publisher','publication_date',)
        list_filter = ('publisher',)
        date_hierarchy = 'publication_date'
        ordering = ('-publication_date',)
        fields = ('title','publisher','authors')

      

    除此之外呢,我们还可以改变针对多对多关系的选择方式,比如说anthors字段:(要先删除之前的fields)

    filter_horizontal = ('authors',)

    filter_horizontal类似的还有filter_vertical方法,区别只是水平排列和竖直排列的问题,但是filter_horizontal和filter_vertical只能用于多对多字段,不可以用于外键;而默认用下拉框来展示的外键,如果很多的话加载时间很大,我们可以用以下方法解决:

    raw_id_fields = ('publisher',) 

      

  • 相关阅读:
    unity vscode 断点问题
    unity Prefab 序列化一个小问题。
    公司有同事中病毒
    有点愧疚,今天把unity官方骗了...
    网络处理,发送约定
    (转载)MonoBehaviour的事件和具体功能总结
    控制台输出乱码问题
    vs遇到的字符串问题
    cmake的下载和安装
    三消设计思路, 通过配置文件搞定一切。
  • 原文地址:https://www.cnblogs.com/cencenyue/p/7920229.html
Copyright © 2020-2023  润新知