开发者社区> thinkgamer.cn> 正文

02.Django后台和数据库的设计

简介: 继上一篇中数据库的连接 一:Admin的工作方式      当服务启动时,Django从`` url.py`` 引导URLconf,然后执行`` admin.autodiscover()`` 语句。
+关注继续查看
继上一篇中数据库的连接

一: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.contrib.redirects,其它从网上下在的第三方Django应用程序一样,都会自行添加到管理工具。

综上所述,管理工具其实就是一个Django应用程序,包含自己的模块、模板、视图和URLpatterns。 你要像添加自己的视图一样,把它添加到URLconf里面。 你可以在Django基本代码中的django/contrib/admin 目录下,检查它的模板、视图和URLpatterns,但你不要尝试直接修改其中的任何代码,因为里面有很多地方可以让你自定义管理工具的工作方式。 (如果你确实想浏览Django管理工具的代码,请谨记它在读取关于模块的元数据过程中做了些不简单的工作,因此最好花些时间阅读和理解那些代码。)


二:构建简单的Admin

修改blog中的models.py
#coding:utf-8

from django.db import models

# Create your models here

class Blog(models.Model):
title = models.CharField(max_length=20) #文章标题
author = models.CharField(max_length=15) #作者
time = models.TimeField() #时间
tag = models.CommaSeparatedIntegerField() #文章标签
content = models.TextField() #内容

def __unicode__(self): #后台中显示的标题
return self.title

class Meta: #自定义数据表名字
db_table = "Blog"

修改blog目录下的admin.py
from django.contrib import admin
from blog.models import Blog
# Register your models here.

admin.site.register(Blog)

同步数据库(首先要删除原先数据库中的User表,否则会报错)manage.py syncdb

创建超级用户:
    manage.py cteatesuperuser

浏览器访问:
    127.0.0.1:8000/admin
    输入刚才创建的账号和密码

三:模块级别的修改

设置字段可选
    name = models.CharField(max_length = 20, **blank = True**)
设置日期和数字型字段可选

    SQL有指定空值的独特方式,它把空值叫做NULL。NULL可以表示为未知的、非法的、或其它程序指定的    含义。

    在SQL中, NULL的值不同于空字符串,就像Python中None不同于空字符串("")一样。这意味着某个字符型字段(如VARCHAR)的值不可能同时包含NULL和空字符串。

    为了消除歧义,Django生成CREATE TABLE语句自动为每个字段显式加上NOT NULL
自定义字段标签
    name = models.CharField(max_length = 20, **blank = True**,verbose_name="AAA")

四:自定义ModelAdmin类
#coding:utf-8
from django.contrib import admin
from blog.models import Blog
# Register your models here.


class BlogAdmin(admin.ModelAdmin):
#自定义列表
list_display = ('title','time','tag','author','content')

#添加过滤段
list_filter = ('time','author')

#自定义过滤菜单,排除一些不想被他人编辑的菜单
fields = ('title','time','tag','author','content')
#快速查询栏
search_fields = ('author','time','tag',)
#多对多字段使用filter_hierarchy,不能用于 ForeignKey字段
filter_hierarchy = ('authors',)

# #用BlogAdmin来注册Blog
admin.site.register(Blog, BlogAdmin)
    
    

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
【双11背后的技术】AliCloudDB——双11商家后台数据库的基石
作者:玄惭 前言 2016年天猫双11购物狂欢节已经完美落下帷幕,千亿成交的背后,作为整个天猫商家后台数据库的基石,AliCloudDB是如何保障在零点洪峰来临时候稳定、安全和顺畅?如此庞大规模的数据库实例集群又是怎样一步步成长起来的?AliCloudDB团队核心老司机玄惭,为你带来,双11是这
3720 0
资源 | 一网打尽成语歇后语,GitHub新华字典数据库
今天,文摘菌给大家推荐一个非常优秀的数据库——新华字典数据库。
3084 0
python3 django配置数据库(mysql)
python3 django配置数据库(mysql) python3 下的mysql驱动 django 连接mysql默认驱动是MySQLdb,MySQLdb没有支持python3的版本,如果使用python3.
3198 0
教你如何用python操作数据库mysql ! !
前言首先,安装需要的环境,Mysql和Python就不说了,必备的东西。 主要是安装的MySQLdb,可以去sf.net下载,具体地址是http://sourceforge.net/projects/mysql-python/ 如果用Ubuntu,直接 sudo apt-get install p...
1815 0
Debugexperience about SQLite & LitePal:创建数据库闪退?注意小括号
参考资料:《第一行代码》 源码(码云): 今天在做一个SQLite的Demo,在Create一个数据库的时候居然闪退:           UI: 还以为是权限问题结果看一下logcat,额。
933 0
+关注
thinkgamer.cn
wechat 搜索【数据与算法联盟】,专注于云计算和算法,目前就职于京东
237
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载