文档下载地址:Django_2.0_中文教程 http://download.csdn.net/detail/julius_lee/6620099
在线地址:http://djangobook.py3k.cn/2.0/
Django 2.0 Book 关键内容记录,主要是为了帮助记忆和理清整个框架,同时以后忘了可以查看,回想。
Django 基本代码的组成部分,是对python标准库和普遍模式的实际表现
1) 修改settings.py文件
确保django.contrib.admin/sessions/auth/contenttypes 已加入到INSTALL_APPS中;
确保MIDDLEWARE_CLASSES包含django.middleware.common.CommonMiddleware,django.contrib.sessions.middleware.SessionMiddleware ,django.contrib.auth.middleware.AuthenticationMiddleware.(一般默认就可以了)
实际中创建项目后一般都如下:
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
)
2) 运行 python manage.py sysncdb,生成管理界面数据表;
3) 将admin访问配置在urls.py中,取消默认的注释:(r'^admin/', include(admin.site.urls)),
这样配置就完成了。
1)浏览器地址栏中输入runserver后的地址和端口进行登录;
2)设置语言:若显示的英语,需要显示中文,则可以更改mysite目录中settings.py中的语言和地区如下:
LANGUAGE_CODE = 'zh-cn'
TIME_ZONE = 'Asia/Shanghai'
这样时间和语言都变成本地的了
在books目录下创建admin.py文件,导入:
from django.contrib import admin from mysite.books.models import Publisher,Author, Book admin.site.register(Publisher) admin.site.register(Author) admin.site.register(Book)
服务启动后,url.py引导URLconf,执行admin.autodiscover(),遍历INSTALL_APPS配置,寻找app目录中的admin.py文件,找到后调用admin.site.register()注册模块到管理工具,然后由管理工具进行显示;
即允许某些内容不填写
只需修改books/models.py文件
示例:
class Author(models.Model): first_name = models.CharField(max_length=30) last_name = models.CharField(max_length=40) email = models.EmailField(**blank=True** )#改空白为true
这样email处就可以选填了
特殊原因:SQL中NULL不同于空字符串,不接受空字符串。NULL是指定空值的唯一方法
示例:
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** )#可以为空
在编辑页面中,字段的标签由模块的字段名称生成。
规则:空格替换下划线,首字母大写,例如:Book模块中publication_date的标签是Publication date
可以在模块中指定verbose_name来自定义
示例:
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'** )#django会自动大写verbose的name。
示例:显示姓名
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') **def __unicode__(self):** **return u'%s %s' % (self.first_name, self.last_name)**#显示每个作者的姓名
示例:显示作者列表
给author模块定义一个ModelAdmin类,修改admin.py如下:
from django.contrib import admin from mysite.books.models import Publisher,Author, Book **class AuthorAdmin(admin.ModelAdmin):** **list_display = ('first_name', 'last_name', 'email')**#这样,括号中的内容都会在界面显示出来 admin.site.register(Publisher) **admin.site.register(Author,AuthorAdmin)**#注册 admin.site.register(Book)
示例:创建查询栏
class AuthorAdmin(admin.ModelAdmin): list_display = ('first_name', 'last_name', 'email') **search_fields = ('first_name', 'last_name')**#这样就可以按名字进行搜索了
示例:创建过滤器
from django.contrib import admin from mysite.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 = ('publication_date',)** admin.site.register(Publisher) admin.site.register(Author, AuthorAdmin) **admin.site.register(Book, BookAdmin)**
示例:修改排序方式
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 = ('publication_date',) date_hierarchy = 'publication_date' ordering = ('-publication_date',) **fields = ('title', 'authors', 'publisher', 'publication_date')**#则会按照这个顺序进行排列,去掉括号中的对应内容,则去掉内容在页面中就会无法改动。
示例:自定义是多对多字段,即一个作者含多本书
class BookAdmin(admin.ModelAdmin): list_display = ('title', 'publisher', 'publication_date') list_filter = ('publication_date',) date_hierarchy = 'publication_date' ordering = ('-publication_date',) **filter_horizontal = ('authors',)**#水平显示选择框
这样做的结果是点击后,浏览器会单独弹出一个窗口,让用户作出选择
对应还有filter_vertical,可以垂直显示
创建 许可,编辑 许可和删除 许可
随机展示一下过去按照教程进行设计的界面:
差不多就能得到上面的管理界面了,具体如何设置和显示,前面已经有方法。