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)
    
    
相关文章
|
4月前
|
存储 关系型数据库 MySQL
Python Django框架下将MySQL数据库的内容在网页上动态展示(修订版-2021-05-17)
Python Django框架下将MySQL数据库的内容在网页上动态展示(修订版-2021-05-17)
30529 0
|
3月前
|
前端开发 数据库 Python
使用 Python 的 Web 框架(如 Django 或 Flask)来建立后端接口,用于处理用户的请求,从数据库中查找答案并返回给前端界面
【1月更文挑战第13天】使用 Python 的 Web 框架(如 Django 或 Flask)来建立后端接口,用于处理用户的请求,从数据库中查找答案并返回给前端界面
87 7
|
10天前
|
关系型数据库 API 数据库
Django中的数据库事务管理:确保数据一致性
【4月更文挑战第15天】Django框架提供强大的数据库事务管理,确保ACID属性,保证数据一致性和完整性。文章深入讨论了Django事务管理,包括使用`@transaction.atomic`装饰器和`transaction.atomic()`上下文管理器手动控制事务,以及低级API进行精细管理。注意避免长时间事务、选择合适隔离级别、正确处理异常及了解数据库特性。掌握这些技巧对构建可靠Web应用至关重要。
|
4月前
|
SQL 数据库 开发者
Python Web 开发: 什么是 Django ORM?如何使用它进行数据库操作?
Python Web 开发: 什么是 Django ORM?如何使用它进行数据库操作?
|
13天前
|
关系型数据库 MySQL 数据库连接
Django(四):Django项目部署数据库及服务器配置详解(MySQL)
Django(四):Django项目部署数据库及服务器配置详解(MySQL)
41 11
|
1月前
|
存储 SQL 数据库
django如何连接sqlite数据库?
django如何连接sqlite数据库?
46 0
|
5月前
|
SQL 关系型数据库 MySQL
07 Django模型 - ORM简介及MySQL数据库的使用
07 Django模型 - ORM简介及MySQL数据库的使用
36 0
|
6月前
|
缓存 关系型数据库 MySQL
Django操作MySQL数据库的优化方法
Django操作MySQL数据库的优化方法
|
7月前
|
存储 JSON BI
如何使用事物码 SAT 查找某个 SAPGUI 屏幕字段对应的后台存储数据库表的名称试读版
如何使用事物码 SAT 查找某个 SAPGUI 屏幕字段对应的后台存储数据库表的名称试读版
53 0
|
3月前
|
Shell 数据库 Python
简记:使用 Django Shell 清空 数据库表
简记:使用 Django Shell 清空 数据库表
32 0