精华内容
下载资源
问答
  • DW CS6怎么新建站点并管理站点?dreamweaver中制作网站很方便,该怎么新建站点呢?建立的站点该怎么管理呢?下面我们就来看看详细的教程,需要的朋友可以参考下
  • 创建管理站点 用DreamweavercS5 很详细 很具体
  • 管理站点

    千次阅读 2018-06-01 23:24:13
    进入管理站点,默认可以对groups、users进行管理 管理界面本地化 编辑settings.py文件,设置编码、时区 LANGUAGE_CODE = 'zh-Hans' TIME_ZONE = 'Asia/Shanghai' 向admin注册booktest的模型 打开booktest/admin.py...

    服务器

    • 运行如下命令可以开启服务器
    python manage.py runserver ip:port
    
    • 可以不写ip,默认端口为8000
    • 这是一个纯python编写的轻量级web服务器,仅在开发阶段使用
    • 服务器成功启动后,提示如下信息

    服务器

    • 默认端口是8000,可以修改端口
    python manage.py runserver 8080
    
    • 打开浏览器,输入网址“127.0.0.1:8000”可以打开默认页面
    • 如果修改文件不需要重启服务器,如果增删文件需要重启服务器
    • 通过ctrl+c停止服务器

    管理操作

    • 站点分为“内容发布”和“公共访问”两部分
    • “内容发布”的部分负责添加、修改、删除内容,开发这些重复的功能是一件单调乏味、缺乏创造力的工作。为此,Django会根据定义的模型类完全自动地生成管理模块

    使用django的管理

    • 创建一个管理员用户
    python manage.py createsuperuser,按提示输入用户名、邮箱、密码
    
    • 启动服务器,通过“127.0.0.1:8000/admin”访问,输入上面创建的用户名、密码完成登录
    • 进入管理站点,默认可以对groups、users进行管理

    管理界面本地化

    • 编辑settings.py文件,设置编码、时区
    LANGUAGE_CODE = 'zh-Hans'
    TIME_ZONE = 'Asia/Shanghai'
    

    向admin注册booktest的模型

    • 打开booktest/admin.py文件,注册模型
    from django.contrib import admin
    from models import BookInfo
    admin.site.register(BookInfo)
    
    • 刷新管理页面,可以对BookInfo的数据进行增删改查操作
    • 问题:如果在str方法中返回中文,在修改和添加时会报ascii的错误
    • 解决:在str()方法中,将字符串末尾添加“.encode('utf-8')”

    自定义管理页面

    • Django提供了admin.ModelAdmin类
    • 通过定义ModelAdmin的子类,来定义模型在Admin界面的显示方式
    class QuestionAdmin(admin.ModelAdmin):
        ...
    admin.site.register(Question, QuestionAdmin)
    
    列表页属性
    • list_display:显示字段,可以点击列头进行排序
    list_display = ['pk', 'btitle', 'bpub_date']
    
    • list_filter:过滤字段,过滤框会出现在右侧
    list_filter = ['btitle']
    
    • search_fields:搜索字段,搜索框会出现在上侧
    search_fields = ['btitle']
    
    • list_per_page:分页,分页框会出现在下侧
    list_per_page = 10
    
    添加、修改页属性
    • fields:属性的先后顺序
    fields = ['bpub_date', 'btitle']
    
    • fieldsets:属性分组
    fieldsets = [
        ('basic',{'fields': ['btitle']}),
        ('more', {'fields': ['bpub_date']}),
    ]
    

    关联对象

    • 对于HeroInfo模型类,有两种注册方式

      • 方式一:与BookInfo模型类相同
      • 方式二:关联注册
    • 按照BookInfor的注册方式完成HeroInfo的注册

    • 接下来实现关联注册
    from django.contrib import admin
    from models import BookInfo,HeroInfo
    
    class HeroInfoInline(admin.StackedInline):
        model = HeroInfo
        extra = 2
    
    class BookInfoAdmin(admin.ModelAdmin):
        inlines = [HeroInfoInline]
    
    admin.site.register(BookInfo, BookInfoAdmin)
    
    • 可以将内嵌的方式改为表格
    class HeroInfoInline(admin.TabularInline)
    

    布尔值的显示

    • 发布性别的显示不是一个直观的结果,可以使用方法进行封装
    def gender(self):
        if self.hgender:
            return '男'
        else:
            return '女'
    gender.short_description = '性别'
    
    • 在admin注册中使用gender代替hgender
    class HeroInfoAdmin(admin.ModelAdmin):
        list_display = ['id', 'hname', 'gender', 'hcontent']
    展开全文
  • 站点配置 成员管理站点配置 成员管理站点配置 成员管理站点配置 成员管理站点配置 成员管理站点配置 成员管理站点配置 成员管理站点配置 成员管理站点配置 成员管理站点配置 成员管理
  • Django笔记(admin站点管理

    千次阅读 2018-09-03 09:44:52
    在admin.py中写入对站点自定义管理类 from django.contrib import admin from .models import Player, Humen # Register your models here. class HumenInfo(admin.TabularInline): # 指定model model = ...

    创建超级用户

    python manage.py createsuperuser

    在models.py中写入模型

    from django.db import models
    
    # Create your models here.
    
    class Player(models.Model):
        name = models.CharField(
            max_length=30,
            verbose_name="游戏名"
        )
        desc = models.CharField(
            max_length=251,
            verbose_name="简介"
        )
        rate = models.FloatField(
            verbose_name="评分"
        )
        def __str__(self):
            return self.name
    
    class Humen(models.Model):
        name = models.CharField(
            max_length=30,
            verbose_name="角色名字"
        )
        player = models.ForeignKey(
            Player,
            verbose_name="所属游戏"
        )

    在admin.py中注册自己的model

    # 注册你的model
    # admin.site.register(类名)
    admin.site.register(Player, PlayerAdmin)
    admin.site.register(Humen)

    在admin.py中写入对站点自定义管理类

    from django.contrib import admin
    from .models import Player, Humen
    
    # Register your models here.
    
    class HumenInfo(admin.TabularInline):
        # 指定model
        model = Humen
        # 指定增加的条数
        extra = 2
    
    class PlayerAdmin(admin.ModelAdmin):
    
        def get_rate_level(self):
            if self.rate > 9:
                return "玩"
            else:
                return "不玩"
        get_rate_level.short_description = "评价"
    
        # 显示
        list_display = ['name', 'rate', 'desc', get_rate_level]
        # 过滤器
        list_filter = ['rate', 'desc']
        # 搜索
        search_fields = ['name']
        # 分页
        list_per_page = 1
        # 信息分组
        fieldsets = [
            ("基本信息", {"fields": ("name", "desc")}),
            ("附加信息", {"fields": ("rate",)})
        ]
        inlines = [HumenInfo]
    
    # 注册你的model
    admin.site.register(Player, PlayerAdmin)
    admin.site.register(Humen)
    

    个性化定制站点管理

    1.首先把admin的路径拿到

    在虚拟环境目录下的lib目录下下下下的admin里

    /home/ubuntu/gz1803/py3_gz1803/lib/python3.6/site-packages/django/contrib/admin/templates/admin

     

    复写里面的login.html文件,在templates里创建admin目录,创建login.html和index.html文件

    复制我们路径下的代码,copy到创建的html中,把base_site.html中的一段代码拷贝出来

    {% block branding %}
    <h1 id="site-name"><a href="{% url 'admin:index' %}">{{ site_header|default:_('Django administration') }}</a></h1>
    {% endblock %}

    复制到login.html和index.py中

    login.html修改的首页的表头    在index.html中修改的

    {% block branding %}
    <h1 id="site-name"><a href="{% url 'admin:index' %}">贼鸡儿困</a></h1>
    {% endblock %}
    
    {% block branding %}
    <h1 id="site-name"><a href="{% url 'admin:index' %}">无聊</a></h1>
    {% endblock %}

    定制站点信息

    在admin.py 中继承AdminSite

    class MyAdmin(admin.AdminSite):
        # 管理网页的页头部的标题
        site_header = "qwer"
        # 浏览窗口显示的页面名称
        site_title = "asdf"
        # 查看站点的跳转,
        site_url = "http://www.baidu.com"
    
    site = MyAdmin()
    site.register(Player, PlayerAdmin)

    最后在工程的urls.pyz中修改admin的跳转

    from dj06app.admin import site
    
    urlpatterns = [
        # url(r'^admin/', admin.site.urls),
        url(r'^admin/', site.urls),

     

    展开全文
  • 上篇:Django项目实践3 - Django模型 Introduction ... 这是以网页和有限的可信任管理者为基础的界面,它可以让你添加,编辑和删除网站内容。 常见的例子: 你可以用这个界面发布博客,后台的网

    http://blog.csdn.net/pipisorry/article/details/45079751

    上篇:Django项目实践3 - Django模型

    Introduction

    对于某一类网站, 管理界面 是基础设施中非常重要的一部分。 这是以网页和有限的可信任管理者为基础的界面,它可以让你添加,编辑和删除网站内容。

    常见的例子: 你可以用这个界面发布博客,后台的网站管理者用它来润色读者提交的内容,你的客户用你给他们建立的界面工具更新新闻并发布在网站上,这些都是使用管理界面的例子。

    创建管理界面通常是千篇一律的。 你必须认证用户,显示并管理表格,验证输入的有效性诸如此类。Django 的自动管理界面: 它读取你模式中的元数据,然后提供给你一个强大可使用的界面,网站管理者可以用它立即工作。

    django.contrib包

    Django自动管理工具是django.contrib的一部分。django.contrib是一套庞大的功能集,它是Django基本代码的组成部分,Django框架就是由众多包含附加组件(add-on)的基本代码构成的。管理工具是讲述django.contrib的第一个部分。从技术层面上讲,它被称作django.contrib.admin。django.contrib中其它可用的特性,如用户鉴别系统(django.contrib.auth)、支持匿名会话(django.contrib.sessioins)以及用户评注系统(django.contrib.comments)。第十六章详细讨论。Django自带很多优秀的附加组件,它们都存在于django.contrib包里。

    Admin是如何工作的

    当服务启动时,Django从`` url.py`` 引导URLconf,然后执行`` admin.autodiscover()`` 语句。 这个函数遍历INSTALLED_APPS配置,并且寻找相关的admin.py文件。 如果在指定的app目录下找到admin.py,它就执行其中的代码。

    在`` books`` 应用程序目录下的`` admin.py`` 文件中,每次调用`` admin.site.register()`` 都将那个模块注册到管理工具中。 管理工具只为那些明确注册了的模块显示一个编辑/修改的界面。应用程序`` django.contrib.auth`` 包含自身的`` admin.py`` ,所以Users和Groups能在管理工具中自动显示。 其它的django.contrib应用程序,从网上下的第三方Django应用程序一样,都会自行添加到管理工具。综上所述,管理工具其实就是一个Django应用程序,包含自己的模块、模板、视图和URLpatterns。 你要像添加自己的视图一样,把它添加到URLconf里面。 你可以在Django基本代码中的django/contrib/admin 目录下,检查它的模板、视图和URLpatterns,但你不要尝试直接修改其中的任何代码,因为里面有很多地方可以让你自定义管理工具的工作方式。



    激活管理界面

    Django管理站点完全是可选择的,因为仅仅某些特殊类型的站点才需要这些功能。

    修改settings文件

    1. 将 'django.contrib.admin'加入setting的 INSTALLED_APPS配置中 ( INSTALLED_APPS中的配置顺序是没有关系的)
    2. 保证 INSTALLED_APPS中包含 'django.contrib.auth''django.contrib.contenttypes''django.contrib.sessions',Django的管理工具需要这3个包。确保 MIDDLEWARE_CLASSES 包含 'django.middleware.common.CommonMiddleware''django.contrib.sessions.middleware.SessionMiddleware''django.contrib.auth.middleware.AuthenticationMiddleware'

    3. 运行 python manage.py syncdb。这一步将生成管理界面使用的额外数据库表。 当你把'django.contrib.auth'加进INSTALLED_APPS后,第一次运行syncdb命令时, 系统会请你创建一个超级用户。 如果你不这么作,你需要运行python manage.py createsuperuser来另外创建一个admin的用户帐号,否则你将不能登入admin

    Note:只有当INSTALLED_APPS包含'django.contrib.auth'时,pythonmanage.py createsuperuser这个命令才可用。


    4. 将admin访问配置在URLconf(urls.py). 默认情况下,命令django-admin.pystartproject生成的文件urls.py是将Django admin的路径注释掉的, 取消注释。

    # Include these import statements...
    from django.contrib import admin
    admin.autodiscover()
    
    # And include this URLpattern...
    urlpatterns = patterns('',
        # ...
        (r'^admin/', include(admin.site.urls)),
        # ...
    )
    


    使用管理工具

    运行Django管理工具

    启动开发服务器(python manage.py runserver),然后在浏览器中访问:http://127.0.0.1:8000/admin/

    管理界面的设计是针对非技术人员的,所以它应该是自我解释的。
    登录管理界面

    使用你原来设置的超级用户的用户名和密码。

    Note:

    1. 如果无法登录,请运行`` python manage.py createsuperuser`` ,确保你已经创建了一个超级用户。

    2. 如果看到如下所示的错误页面报告:ImportError at /admin/cannot import name patterns...很可能使用的 Django 版本不符合,可以切换到对应的旧版本教程去或者更新到较新的 Django 版本。

    管理页面


    Note:
    1. 这个页面列出了管理工具中可编辑的所有数据类型。 它仅有两个默认的管理-编辑模块:用户组(Groups)和用户(Users)。
    2. 界面上并没有显示之前创建的数据表,因为我们的这个表没有在admin.py中注册,也就是admin后台并不知道。后面会讲怎么添加/注册 -- 将Models加入到Admin管理。

    3. 在Django管理页面中,每一种数据类型都有一个* change list* 和* editform* 。前者显示数据库中所有的可用对象;后者可让你添加、更改和删除数据库中的某条记录。

    配置Django管理工具语言

    如果你的母语不是英语,而你不想用它来配置你的浏览器,你可以做一个快速更改来观察Django管理工具是否被翻译成你想要的语言。

    仅需添加`` ‘django.middleware.locale.LocaleMiddleware’`` 到`` MIDDLEWARE_CLASSES`` 设置中,并确保它在’django.contrib.sessions.middleware.SessionMiddleware’* 之后* 。

    完成后,请刷新页面。 如果你设置的语言可用,一系列的链接文字将被显示成这种语言。这些文字包括页面顶端的Changepassword和Log out,页面中部的Groups和Users。 Django自带了多种语言的翻译。[ Django更多的国际化特性]
    更改列表
    点击Uers行中的Change链接。这个页面显示了数据库中所有的用户。可以将它看作是一个漂亮的网页版查询:`` SELECT * FROM auth_user;`` ,你会发现页面中还有过滤器、排序和查询框。 过滤器在右边;排序功能可通过点击列头查看;查询框在页面顶部,它允许你通过用户名查询。
    点击其中一个用户名,你会看见关于这个用户的编辑窗口。


    Note:
    1. 这个页面允许你修改用户的属性,如姓名和权限。 (如果要更改用户密码,你必须点击密码字段下的change the password using this form)

    2. 不同类型的字段会用不同的窗口控件显示。例如,日期/时间型用日历控件,布尔型用复选框,字符型用简单文本框显示。

    3. 你可以通过点击编辑页面下方的删除按钮来删除一条记录。 你会见到一个确认页面。有时候,它会显示有哪些关联的对象将会一并被删除。 (例如,如果你要删除一个出版社,它下面所有的图书也将被删除。)

    4. 你可以通过点击管理主页面中某个对象的Add来添加一条新记录。 一个空白记录的页面将被打开,等待你填充。

    5. 你还能看到管理界面也控制着你输入的有效性。 你可以试试不填必需的栏目或者在时间栏里填错误的时间,你会发现当你要保存时会出现错误信息。

    6. 当你编辑已有的对像时,你在窗口的右上角可以看到一个历史按钮。 通过管理界面做的每一个改变都留有记录,你可以按历史键来检查这个记录。
    将Models加入到Admin管理

    将自己的模块加入管理工具中,这样我们就能够通过这个漂亮的界面添加、修改和删除数据库中的对象了。之前我们定义了三个模块:PublisherAuthorBook

    在mysite/books/创建admin.py,输入以下代码,通知管理工具为这些模块逐一提供界面。

    from django.contrib import admin
    from VoteSite.books.models import Publisher, Author, Book
    
    # Register your models here.
    admin.site.register(Publisher)
    admin.site.register(Author)
    admin.site.register(Book)
    
    完成后,打开页面`` http://127.0.0.1:8000/admin/`` ,你会看到一个Books区域,其中包含Authors、Books和Publishers。  (你可能需要重启runserver)
    Note:这里有个神奇的bug:修改后Django服务器会报错,但python文件中不报错,把 fromVoteSite.books.models importPublisher, Author, Book修改为 frombooks.models importPublisher, Author, Book后Django服务器不报错,但python文件中会显示错误,只是这个错误没影响- -,runserver成功!
    修正方法:pycharm > settings > languages & framworks > Django > pythonworkspace > Enable Django Support: Django project root:E:\mine\python_workspace\VoteSite settings: VoteSite\settings.py > OK。这样做是为了告诉python这是一个Django项目。(跳跳乱说,不能解决)

    管理工具处理外键和多对多关系的方法

    `` Book`` 模块的例子:

    class Book(models.Model):
        title = models.CharField(max_length=100)
        authors = models.ManyToManyField(Author)
        publisher = models.ForeignKey(Publisher)
        publication_date = models.DateField()
    

    在Add book页面中(`` http://127.0.0.1:8000/admin/books/book/add/`` ),`` 外键`` publisher用一个选择框显示,`` 多对多`` 字段author用一个多选框显示。 点击两个字段后面的绿色加号,可以让你添加相关的记录。

    举个例子,如果你点击Publisher后面的加号,你将会得到一个弹出窗口来添加一个publisher。 当你在那个窗口中成功创建了一个publisher后,Add book表单会自动把它更新到字段上去.

    http://blog.csdn.net/pipisorry/article/details/45079751



    自定义管理工具-自定义模块

    Note:记住这三步来实现模型的变更(否则在日期型和数字型字段设置时保存信息到数据库会成功,但会显示错误)[Django项目实践3 - Django模型]

    • 修改你的模型(在models.py中)。
    • 运行python manage.py makemigrations命令为这些改动创建迁移文件。
    • 运行python manage.py migrate命令将这些改动应用到数据库中。
    设置字段可选

    管理工具有个限制:编辑表单需要你填写每一个字段,然而在有些情况下,你想要某些字段是可选的,即允许不填,允许输入空值。

    为了指定email字段为可选,你只要编辑Book模块,在email字段上加上blank=True。代码如下:

    class Author(models.Model):
        first_name = models.CharField(max_length=30)
        last_name = models.CharField(max_length=40)
        email = models.EmailField(blank=True)
    

    这些代码告诉Django,作者的邮箱地址允许输入一个空值。 所有字段都默认blank=False,这使得它们不。

    当你添加blank=True以后,刷新页面Add author edit form(http://127.0.0.1:8000/admin/books/author/add/ ),将会发现Email的标签不再是粗体了。

    Note:blank=True就是说默认值是‘’,而不是NULL,因为从下面可知,Django生成CREATETABLE语句自动为每个字段显式加上NOT NULL。

    设置日期型和数字型字段可选(还有ImageField等)

    虽然blank=True同样适用于日期型和数字型字段,但是这里需要详细讲解一些背景知识。

    SQL有指定空值的独特方式,它把空值叫做NULL。NULL可以表示为未知的、非法的、或其它程序指定的含义。在SQL中,NULL的值不同于空字符串,就像Python中None不同于空字符串("")一样。这意味着某个字符型字段(如VARCHAR)的值不可能同时包含NULL和空字符串。这会引起不必要的歧义或疑惑。 为什么这条记录有个NULL,而那条记录却有个空字符串? 怎样才能得到全部拥有空值的记录,应该按NULL和空字符串查找还是仅按字符串查找?

    为了消除歧义,Django生成CREATETABLE语句自动为每个字段显式加上NOT NULL。 生成Author模块的例子:

    CREATE TABLE "books_author" (
        "id" serial NOT NULL PRIMARY KEY,
        "first_name" varchar(30) NOT NULL,
        "last_name" varchar(40) NOT NULL,
        "email" varchar(75) NOT NULL
    );
    

    数据一致性:在管理工具中,如果你留空一个字符型字段,它会为此插入一个空字符串(而不是NULL)。

    但是,日期型、时间型和数字型字段不接受空字符串,可能会得到数据库返回的错误。 (PostgreSQL比较严禁,会抛出一个异常;MySQL可能会也可能不会接受。)

    在这种情况下,NULL是唯一指定空值的方法。 因此,如果你想允许一个日期型(DateFieldTimeFieldDateTimeField)或数字型(IntegerFieldDecimalFieldFloatField)字段为空,你需要使用null=Trueblank=True

    class Book(models.Model):
        '''
        书籍有书名和出版日期
        '''
        title = models.CharField(max_length=100)
        authors = models.ManyToManyField(Author)
        publisher = models.ForeignKey(Publisher)
        publication_date = models.DateField(blank=True, null=True)
    
        def __str__(self):
            return self.title
    

    因为null=True改变了数据的语义,即改变了CREATETABLE语句,把publication_date字段上的NOTNULL删除了。 要完成这些改动,我们还需要更新数据库。

    出于某种原因,Django不会尝试自动更新数据库结构。所以你必须执行ALTERTABLE语句将模块的改动更新至数据库。可以使用python manage.py dbshell进入数据库服务环境。[Mysql数据库安装及配置]

    ALTER TABLE books_book ALTER COLUMN publication_date DROP NOT NULL;
    

    以上SQL语法是PostgreSQL特有的。[详细数据库结构更改]

    自定义字段标签

    在编辑页面中,每个字段的标签都是从模块的字段名称生成的。 规则很简单: 用空格替换下划线;首字母大写。例如:Book模块中publication_date的标签是Publication date。


    自定义一个标签。 你只需在模块中指定verbose_name。将Author.email的标签改为e-mail:

    class Author(models.Model):
        first_name = models.CharField(max_length=30)
        last_name = models.CharField(max_length=40)
        email = models.EmailField(blank=True, verbose_name='e-mail')
    

    修改后重启服务器,你会在author编辑页面中看到这个新标签。


    Note:不必把verbose_name的首字母大写,Django会自动适时将首字母大写,并且在其它不需要大写的地方使用verbose_name的精确值。

    django后台设置可动态增删的add字段

    {实现如工作经历随时增删}

    class WorkExp(models.Model):
        work_experience = models.TextField(verbose_name='工作经历')
    
    class People(models.Model):
        name = models.CharField(max_length=150, verbose_name='姓名')
        #...
    
        work_experiences = models.ManyToManyField(WorkExp, blank=True, null=True, verbose_name='工作经历')
    这样就可以在后台随时点击add,在弹出框中增加工作经历

    Note:在表WorkExp未建立前,后面的+符号是没有的,所以要确保表WorkExp已建立。



    自定义ModelAdmin类-自定义管理工具

    我们做的blank=Truenull=Trueverbose_name修改其实是模块级别,而不是管理级别的。 也就是说,这些修改实质上是构成模块的一部分,并且正好被管理工具使用,而不是专门针对管理工具的。

    自定义管理工具选项都在ModelAdmin classes里面,这些类包含了管理工具中针对特别模块的配置。

    自定义显示字段

    {自定义Author模块的列表中的显示字段 - Select  *** to change界面}

    列表默认地显示查询结果中对象的__unicode__()。 

    class Author(models.Model):
        '''
        作者有姓,有名及email地址
        '''
        first_name = models.CharField(max_length=30)
        last_name = models.CharField(max_length=40)
        email = models.EmailField(blank=True, verbose_name='e-mail')
    
        def __str__(self):
            return u'%s %s' % (self.first_name, self.last_name)
    

    列表中显示的是每个作者的姓名。


    添加其它字段,从而改变列表的显示
    比如说:在这个列表中可以看到作者的邮箱地址;能按照姓氏或名字来排序。

    Author模块定义一个ModelAdmin类。 这个类是自定义管理工具的关键,其中最基本的一件事情是允许你指定列表中的字段。 打开admin.py并修改:

    from django.contrib import admin
    from books.models import Publisher, Author, Book
    
    
    class AuthorAdmin(admin.ModelAdmin):
        list_display = ('first_name', 'last_name', 'email')
    
    # Register your models here.
    admin.site.register(Publisher)
    # admin.site.register(Author)
    admin.site.register(Author, AuthorAdmin)
    admin.site.register(Book)
    
    

    Note:

    1. 新建类AuthorAdmin,从django.contrib.admin.ModelAdmin派生出来的子类,保存着一个类的自定义配置,以供管理工具使用。 我们只自定义了一项:list_display, 它是一个字段名称的元组,用于列表显示。 当然,这些字段名称必须是模块中有的。

    2. 我们修改了admin.site.register()调用,在Author后面添加了AuthorAdmin: 用AuthorAdmin选项注册Author模块。admin.site.register()函数接受一个ModelAdmin子类作为第二个参数。

    3. the value of list_display must not be a manyToManyField!  如BookAdmin中的list_display不能有authors。

    刷新author列表页面


    添加一个快速查询栏

    {Select  *** to change界面}

     向AuthorAdmin追加search_fields,如:

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

    刷新浏览器,你会在页面顶端看到一个根据姓名查询的查询框。正如用户所希望的那样,它是大小写敏感,并且对两个字段检索的查询框。如果查询"bar",那么名字中含有Barney和姓氏中含有Hobarson的作者记录将被检索出来。


    添加过滤器

    {Select  *** to change界面}

    from django.contrib import admin
    from books.models import Publisher, Author, Book
    
    
    class AuthorAdmin(admin.ModelAdmin):
        list_display = ('first_name', 'last_name', 'email')
        search_fields = ('first_name', 'last_name')
    
    class BookAdmin(admin.ModelAdmin):
        list_display = ('title', 'publisher', 'publication_date')
        list_filter = ('publisher_date',)
    
    # Register your models here.
    admin.site.register(Publisher)
    # admin.site.register(Author)
    admin.site.register(Author, AuthorAdmin)
    admin.site.register(Book, BookAdmin)
    
    

    Note:

    1. 由于我们要处理一系列选项,因此我们创建了一个单独的ModelAdmin类:BookAdmin

    2. 首先,我们定义一个list_display,以使得页面好看些。 然后,我们用list_filter这个字段元组创建过滤器,它位于列表页面的右边。

    3. Django为日期型字段提供了快捷过滤方式,它包含:今天、过往七天、当月和今年。这些是开发人员经常用到的。


    `` 过滤器`` 同样适用于其它类型的字段

    不单是`` 日期型`` (`` 布尔型`` 和`` 外键`` 字段)。当有两个以上值时,过滤器就会显示。

    另外一种过滤日期的方式是使用date_hierarchy选项,如:

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

    修改后页面中的列表顶端会有一个逐层深入的导航条,效果如图 6-11. 它从可用的年份开始,然后逐层细分到月乃至日。


    Note:date_hierarchy接受的是* 字符串* ,而不是元组。因为只能对一个日期型字段进行层次划分。

    改变默认的排序方式

    按publication date降序排列。 列表页面默认按照模块classMeta中的ordering所指的列排序。但目前没有指定ordering值,所以当前排序是没有定义的。

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

    Note:这个ordering选项基本像模块中classMetaordering那样工作,除了它只用列表中的第一个字段名。如果要实现降序,仅需在传入的列表或元组的字段前加上一个减号(-)。

    刷新book列表页面观看实际效果。 注意Publicationdate列头现在有一个小箭头显示排序。

    自定义编辑表单

    {change *** 编辑界面}
    先自定义字段顺序。 默认地,表单中的字段顺序是与模块中定义是一致的。通过使用 ModelAdmin子类中的 fields选项来改变它:
    class BookAdmin(admin.ModelAdmin):
        list_display = ('title', 'publisher', 'publication_date')
        list_filter = ('publication_date',)
        date_hierarchy = 'publication_date'
        ordering = ('-publication_date',)
        **fields = ('title', 'authors', 'publisher', 'publication_date')**
    

    完成之后,编辑表单将按照指定的顺序显示各字段。 作者排在书名之后。 字段顺序当然是与数据条目录入顺序有关, 每个表单都不一样。

    通过fields这个选项,你可以排除一些不想被其他人编辑的fields 只要不选上不想被编辑的field(s)即可。 当你的admi用户只是被信任可以更改你的某一部分数据时,或者,你的数据被一些外部的程序自动处理而改变了了,你就可以用这个功能。 例如,在book数据库中,我们可以隐藏publication_date,以防止它被编辑。

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

    Note:1. 上图中就没有修改publication日期的选项了。

    2. 当一个用户用这个不包含完整信息的表单添加一本新书时,Django会简单地将publication_date设置为None,以确保这个字段满足null=True的条件。

    另一个常用的编辑页面自定义是针对多对多字段的。 真如我们在book编辑页面看到的那样,`` 多对多字段`` 被展现成多选框。虽然多选框在逻辑上是最适合的HTML控件,但它却不那么好用。 如果你想选择多项,你必须还要按下Ctrl键(苹果机是command键)。 虽然管理工具因此添加了注释(help_text),但是当它有几百个选项时,它依然显得笨拙。

    使用filter_horizontal

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

    刷新book编辑页面,你会看到Author区中有一个精巧的JavaScript过滤器,它允许你检索选项,然后将选中的authors从Available框移到Chosen框,还可以移回来。


    强烈建议针对那些拥有十个以上选项的`` 多对多字段`` 使用filter_horizontal。 这比多选框好用多了。 你可以在多个字段上使用filter_horizontal,只需在这个元组中指定每个字段的名字。

    ModelAdmin类还支持filter_vertical选项

    它像filter_horizontal那样工作,除了控件都是垂直排列,而不是水平排列的。 至于使用哪个,只是个人喜好问题。

    Note:filter_horizontalfilter_vertical选项只能用在多对多字段 上, 而不能用于ForeignKey字段。 

    raw_id_fields选项

    默认地,管理工具使用`` 下拉框`` 来展现`` 外键`` 字段。但是,正如`` 多对多字段`` 那样,有时候你不想忍受因装载并显示这些选项而产生的大量开销。 例如,我们的book数据库膨胀到拥有数千条publishers的记录,以致于book的添加页面装载时间较久,因为它必须把每一个publishe都装载并显示在`` 下拉框`` 中。

    解决这个问题的办法是使用`` raw_id_fields`` 选项。它是一个包含外键字段名称的元组,它包含的字段将被展现成`` 文本框`` ,而不再是`` 下拉框`` 。

    class BookAdmin(admin.ModelAdmin):
        list_display = ('title', 'publisher', 'publication_date')
        list_filter = ('publication_date',)
        date_hierarchy = 'publication_date'
        ordering = ('-publication_date',)
        filter_horizontal = ('authors',)
        **raw_id_fields = ('publisher',)**
    
    在这个输入框中,你输入什么呢? publisher的数据库ID号。 考虑到人们通常不会记住这些数据库ID,管理工具提供了一个放大镜图标方便你输入。点击那个图标将会弹出一个窗口,在那里你可以选择想要添加的publishe。


    关联对象inline

    models:
    class Professor(People):
        job_title = models.CharField(max_length=150, blank=True, verbose_name='职称')
    
     class ResDir(models.Model):
        research_direction = models.TextField(blank=True, verbose_name='研究方向')
        professor = models.ForeignKey(Professor)
        # postgraduate = models.ForeignKey(Postgraduate)
    admin.py:
    class inlineBase(admin.TabularInline):
        extra = 1
    
    class ResDirInline(inlineBase):  # 要重启runserver
        model = ResDir
    
    class ProfessorAdmin(admin.ModelAdmin):
        inlines = [ResDirInline, ]
    [Django admin site(三)InlineModelAdmin]
    嵌套关联对象nested inline
    安装django-nested-inline

    pip install django-nested-inline

    使用

    settings.py中的INSTALLED_APPS中添加nested_inline

    INSTALLED_APPS = (
    ...
     'nested_inline'
    )

    Note:否则会出现找不到tabular-nested.html模板错误:
    TemplateDoesNotExist at /admin/bigdata/lab/add/
    admin/edit_inline/tabular-nested.html

    # 实验室相关信息
    class Lab(models.Model):
        introduction = models.TextField(null=True)
        achievement = models.TextField(null=True)
    
    class Directions(models.Model):
        research_direction = models.TextField(blank=True, verbose_name='研究方向')
        lab = models.ForeignKey(Lab)
    
    class Images(models.Model):
        images = models.ImageField(blank=True, verbose_name='图片')
        directions = models.ForeignKey(Directions)
    

    class ImagesInline(NestedInlineBase):
        model = Images
    
    class DirectionsInline(NestedInlineBase):
        model = Directions
        inlines = [ImagesInline]
    
    class LabAdmin(NestedModelAdmin):
        inlines = [DirectionsInline]
    admin.site.register(Lab, LabAdmin)
    效果图

    [ django-nested-inline 0.3.4]
    [ Nested Inline in Django Admin]
    [ Django Admin nested inline]



    用户、用户组和权限

    因为你是用超级用户登录的,你可以创建,编辑和删除任何对像。

    管理工具有一个用户权限系统,通过它你可以根据用户的需要来指定他们的权限,从而达到部分访问系统的目的。用户帐号应该是通用的、独立于管理界面以外仍可以使用。但我们现在把它看作是管理界面的一部分。 [如何把用户帐号与你的网站(不仅仅是管理工具)集成在一起]

    你通过管理界面编辑用户及其许可就像你编辑别的对象一样。  如你所想,用户对象有标准的用户名、密码、邮箱地址和真实姓名,同时它还有关于使用管理界面的权限定义。
    首先,这有 一组三个布尔型标记:
    • 活动标志,它用来控制用户是否已经激活。 如果一个用户帐号的这个标记是关闭状态,而用户又尝试用它登录时,即使密码正确,他也无法登录系统。

    • 成员标志,它用来控制这个用户是否可以登录管理界面(即:这个用户是不是你们组织里的成员) 由于用户系统可以被用于控制公众页面(即:非管理页面)的访问权限,这个标志可用来区分公众用户和管理用户。

    • 超级用户标志,它赋予用户在管理界面中添加、修改和删除任何项目的权限。 如果一个用户帐号有这个标志,那么所有权限设置(即使没有)都会被忽略。

    普通的活跃、非超级用户的管理用户可以根据一套设定好的许可进入。

    管理界面中每种可编辑的对象(如:books)都有三种权限:创建 许可,编辑 许可和删除 许可。 给一个用户授权许可也就表明该用户可以进行许可描述的操作。

    当你创建一个用户时,它没有任何权限,该有什么权限是由你决定的。 例如,你可以给一个用户添加和修改publishers的权限,而不给他删除的权限。 请注意,这些权限是定义在模块级别上,而不是对象级别上的。这种基于对象级别的权限设置比较复杂,可以在Django documentation中寻找答案。

    Note:权限管理系统也控制编辑用户和权限。 如果你给某人编辑用户的权限,他可以编辑自己的权限,这种能力可能不是你希望的。 赋予一个用户修改用户的权限,本质上说就是把他变成一个超级用户。

    你也可以给组中分配用户。 一个 组 简化了给组中所有成员应用一套许可的动作。 组在给大量用户特定权限的时候很有用。

    何时、为什么使用管理界面?

    Django的管理界面对非技术用户要输入他们的数据时特别有用;事实上这个特性就是专门为这个 实现的。

    在Django最开始开发的新闻报道的行业应用中,有一个典型的在线自来水的水质专题报道 应用,它的实现流程是这样的:

    • 负责这个报道的记者和要处理数据的开发者碰头,提供一些数据给开发者。

    • 开发者围绕这些数据设计模型然后配置一个管理界面给记者。

    • 记者检查管理界面,尽早指出缺少或多余的字段。 开发者来回地修改模块。

    • 当模块认可后,记者就开始用管理界面输入数据。 同时,程序员可以专注于开发公众访问视图和模板(有趣的部分)。

    换句话说,Django的管理界面为内容输入人员和编程人员都提供了便利的工具。

    除了数据输入方面,管理界面在下面这些情景中也是很有用的:

    1. 检查模块* :当你定义好了若干个模块,在管理页面中把他们调出来然后输入一些虚假的数据,这是相当有用的。 有时候,它能显示数据建模的错误或者模块中其它问题。

    2. 管理既得数据* :如果你的应用程序依赖外部数据(来自用户输入或网络爬虫),管理界面提供了一个便捷的途径,让你检查和编辑那些数据。 你可以把它看作是一个功能不那么强大,但是很方便的数据库命令行工具。

    3. 临时的数据管理程序* :你可以用管理工具建立自己的轻量级数据管理程序,比如说开销记录。 如果你正在根据自己的,而不是公众的需要开发些什么,那么管理界面可以带给你很大的帮助。 从这个意义上讲,你可以把它看作是一个增强的关系型电子表格。

    最后一点要澄清的是: 管理界面不是终结者。 过往许多年间,我们看到它被拆分、修改成若干个功能模块,而这些功能不是它所支持的。 它不应成为一个* 公众* 数据访问接口,也不应允许对你的数据进行复杂的排序和查询。 正如本章开头所说,它仅提供给可信任的管理员。 请记住这一点,它是有效使用管理界面的钥匙。

    from:http://blog.csdn.net/pipisorry/article/details/45079751


    展开全文
  • 【Django第一步】第七部分:自定义管理站点 @[Django, 翻译, python] Django第一步第七部分自定义管理站点 自定义管理表单 添加相关对象 自定义管理员更改列表 我们将重新自定义管理站点 自定义管理...

    【Django第一步】第七部分:自定义管理站点

    @[Django, 翻译, python]

    我们将重新自定义管理站点

    自定义管理表单

    通过注册Question的模型admin.site.register(Question),Django可以生成一个默认的管理表单。通常你希望可以自己定制它的样式。你可以在生成表单的时候告诉Django需要的选项。

    现在,我们更改polls/admin.py如下:

    from django.contrib import admin
    
    from .models import Question
    
    
    class QuestionAdmin(admin.ModelAdmin):
        fields = ['pub_date', 'question_text']
    
    admin.site.register(Question, QuestionAdmin)

    您将遵循此模式 - 创建模型管理员类,然后将其作为第二个参数传递给admin.site.register()

    上面的这个特殊变化使“出版日期”出现在“问题”字段之前:
    这里写图片描述

    这只有两个feild,并不令人印象深刻,但对于包含数十个feild的管理员表单,选择直观的样式是一个重要的环节

    你可能会想将表单分成几个字段

    from django.contrib import admin
    
    from .models import Question
    
    
    class QuestionAdmin(admin.ModelAdmin):
        fieldsets = [
            (None,               {'fields': ['question_text']}),
            ('Date information', {'fields': ['pub_date']}),
        ]
    
    admin.site.register(Question, QuestionAdmin)

    每个元组的第一个元素 fieldsets是字段集的标题。以下是我们的表单现在的样子:
    这里写图片描述

    添加相关对象

    现在我们已经有了我们的管理员界面,但是一个Question对应多可Choice,并且管理页面并不显示Choice

    有两种方法可以解决这个问题。

    我们可以像注册Question一样注册Choice

    from django.contrib import admin
    
    from .models import Choice, Question
    # ...
    admin.site.register(Choice)

    这里写图片描述

    在这种形式下,“Question”字段是包含数据库中每个问题的选择框。Django知道a ForeignKey应该在管理员中表现为一个<select>框。在我们的案例中,目前只有一个问题存在。

    实际上,这是Choice向系统添加对象的低效方式。如果您可以在创建Question对象时直接添加一堆Choices,那会更好 。

    from django.contrib import admin
    
    from .models import Choice, Question
    
    
    class ChoiceInline(admin.StackedInline):
        model = Choice
        extra = 3
    
    
    class QuestionAdmin(admin.ModelAdmin):
        fieldsets = [
            (None,               {'fields': ['question_text']}),
            ('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}),
        ]
        inlines = [ChoiceInline]
    
    admin.site.register(Question, QuestionAdmin)

    这告诉Django,Choice在Question管理界面上进行编辑。默认情况下为3个选择
    这里写图片描述

    自定义管理员更改列表

    默认情况下,Django显示__str__,但是有的时候,我们显示字段会更好。要做到这一点,我们需要为admin加上list_display项

    class QuestionAdmin(admin.ModelAdmin):
        # ...
        list_display = ('question_text', 'pub_date', 'was_published_recently')

    这里写图片描述

    您可以单击列标题按照这些值进行排序

    我们也可以再改进,加上

    list_filter = ['pub_date']

    这里写图片描述
    还可以加上搜索功能

    search_fields = ['question_text']
    展开全文
  • 5.4 管理站点中的模板

    2020-03-18 15:43:47
    5.4 管理站点中的模板 在Dreamweaver中,用户可以对模板文件进行各种管理和操作,例如删除模板和更改模板。
  • Dreamweaver CC中文版网页设计与制作 第3章 创建与管理站点 本章要点 站点及站点结构 创建本地站点 管理站点 专题课堂——管理站点文件 本章主要内容 本章主要介绍站点及站点结构、创建本地站点、管理站点管理...
  • dreamweaver里不用的站点怎么删除?

    千次阅读 2021-06-09 14:56:27
    很多朋友不知道在dreamweaver里怎样删除自己创建的站点,下面小编就来为朋友们介绍一下在dreamweaver里怎样删除自己创建的站点。...3、在其子菜单中选择“管理站点”按钮。4、之后会弹出站点列表,选择你想要...
  • 收集了下Primavera P6相关的学习站点或群组,由需要学习的话可以关注下 *论坛或站点 中国 Primavera用户组CPUG(China Primavera User Group)http://www.p3bbs.comhttp://www.p3bbs.com/read.php?tid-3490.html ...
  • IIS多站点管理系统.rar

    2019-12-25 13:17:32
    通过此工具可以管理IIS站点。刷新、启动站点、停止站点、创建站点、删除站点、重新启动IIS、打开IIS管理器功能。 工具以管理员的方式启动。
  • Dreamweaver站点管理

    千次阅读 2011-07-30 18:39:09
    对于制作维护一个网站,首先需要在本地磁盘上制作修改网站的文件,然后把这个网站...放置在本地磁盘上的网站被称为本地站点,位于互联网Web服务器里的网站被称为远程站点。Dreamweaver 提供了对本地站点和远程站点
  • 详细的介绍了PHPCMS V9站点是如何管理的,以及PHPCMS V9发布点的管理
  • * * * 第2章 站点的创建与 管理 第2章 站点的创建与管理 学习要点 站点的规划 认识站点面板 创建我的第一个网站 导出和导入站点 管理站点 站点就是放置网站上所有文件的地方在Dreamweaver CC中站点包括远程站点和...
  • 选择管理站点 因为FreeCMS支持网站群模式,所以使用网站内容管理功能时需要您先选择要管理的站点。 点击“切换站点”名称,进入站点选择页面。 直接选择站点(如FreeCMS)即可。
  • 管理员可以在这里设置当前管理站点是否允许移动app访问,是否默认移动APP站点,首页的布局,首页数据最多加载页数。 从左侧管理菜单点击站点配置进入。   填写相关属性后点击保存按钮即可,只有设置为允许...
  • IIS多站点管理工具

    2009-01-08 10:52:46
    IIS多站点管理工具 可以建立多个站点,方便设计。IIS多站点管理工具 可以建立多个站点,方便设计。IIS多站点管理工具 可以建立多个站点,方便设计。
  • python+Django 之 后台站点管理

    千次阅读 2018-08-14 14:30:10
    一般来说、站点分为内容发布和公共...使用django站点管理模块步骤: (1)管理界面本地化 (2)创建管理员 (3)注册模型类 (4)自定义管理页面。 1、管理界面本地化 :将语言,时间设置为本地的语言时间  修改...
  • 前台页面设计 PAGE PAGE 1 项目一 网页知识储备 教学班级 软件技术12-1 课时 2 任课教师 仝素梅 授课课题 任务2 站点的创建与管理 教学目标 了解网站开发工作流程 了解站点的作用 掌握站点的创建与管理 教学重点 ...
  • 参见: https://www.cnblogs.com/finalanddistance/p/8877478.html
  • Dreamweaver8.0本地站点的搭建与管理

    千次阅读 2016-06-25 13:57:11
    Dreamweaver 8提供了对本地站点和远程站点强大的管理功能。 1、规划站点结构 网站是多个网页的集合,其包括一个首页和若干个分页,这种集合不是简单的集合。为了达到最佳效果,在创建任何 We
  • diango站点管理

    千次阅读 2018-10-31 19:08:00
    使用站点管理 Django中默认集成了后台数据管理页面,通过简单的配置就可以实现模型后台的Web控制台,如果没有集成,自己在settings中的INSTALLED_APPS添加'django.contrib.admin'应用就好了 设置为中文 settings中...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 341,471
精华内容 136,588
关键字:

如何管理站点