1.在settings.py中配置数据库。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'mysite',
'HOST': '192.168.1.1',
'USER': 'root',
'PASSWORD': 'pwd',
'PORT': '3306',
}
}
2.修改时区:TIME_ZON
E设置为国内所在的时区Asia/Shanghai
。
3.添加app,INSTALLED_APPS
中会自动包含下列条目
django.contrib.admin:admin管理后台站点
django.contrib.auth:身份认证系统
django.contrib.contenttypes:内容类型框架
django.contrib.sessions:会话框架
django.contrib.messages:消息框架
django.contrib.staticfiles:静态文件管理框架
4.创建模型
Django通过自定义Python类的形式来定义具体的模型,每个模型的物理存在方式就是一个Python的类Class,每个模型代表数据库中的一张表,每个类的实例代表数据表中的一行数据,类中的每个变量代表数据表中的一列字段。
Django通过模型,将Python代码和数据库操作结合起来,实现对SQL查询语言的封装。也就是说,你可以不会管理数据库,可以不会SQL语言,你同样能通过Python的代码进行数据库的操作。Django通过ORM对数据库进行操作,奉行代码优先的理念,将Python程序员和数据库管理员进行分工解耦。
black=true:允许为空值
如果想让日期字段(如 DateField 、 TimeField 、 DateTimeField )或数值字段(如IntegerField 、 DecimalField 、 FloatField )接受空值,要同时添加 null=True 和 blank=True 。
只要觉得模型有问题,就可以运行 python manage.py check ,
它能捕获全部常见的模型问题。
5.迁移
python manage.py makemigrations polls
6.在数据库中创建表:
python manage.py migrate
7.修改模型时的操作分三步:
在models.py中修改模型;
运行
python manage.py makemigrations
为改动创建迁移记录;运行
python manage.py migrate
,将操作同步到数据库。
- admin后台管理站点
- 创建一个可以登录admin站点的用户
python manage.py createsuperuser
- 依次输入用户名,邮箱和密码
9.修改后台url
在实际环境中,为了站点的安全性,我们不能将管理后台的url随便暴露给他人,不能用/admin/这么简单的路径。
打开根url路由文件mysite/urls.py,修改其中admin.site.urls对应的正则表达式,换成你想要的,比如:
from django.conf.urls import url
from django.contrib import admin
urlpatterns = [
url(r'^my/set/', admin.site.urls),
]
这样,我们必须访问http://127.0.0.1:8000/my/set/
才能进入admin界面。
10.登入站点
- 当前只有两个可编辑的内容:groups和users。它们django.contrib.auth模块提供的身份认证框架。
11.4. 在admin中注册app
- 现在还无法看到投票应用,必须先在admin中进行注册,告诉admin站点,请将polls的模型加入站点内,接受站点的管理。
打开polls/admin.py文件,加入下面的内容:
from django.contrib import admin
from .models import Question
admin.site.register(Question)
12.__str__()
就是其中一例,其作用是让模型知道如何显示自身.
13.数据访问:all(),filter(),exclude(),get(),value(),value_list()
Publisher.objects.all() :
参考网址:https://blog.csdn.net/Fe_cow/article/details/80669146
首先, Publisher 是我们定义的模型。想查找数据就应该使用相应的模型。
然后,访问 objects 属性。这叫管理器(manager),管理器负责所有“表层”数据操作,包括(最重要的)数据查询。所有模型都自动获得一个 objects 管理器,需要查询模型实例时都要使用它。
最后,调用 all() 方法。这是 objects 管理器的一个方法,返回数据库中的所有行。虽然返回的对象看似一个列表,但其实是一个查询集合(QuerySet)——表示数据库中一系列行的对象。
所有数据库查找操作都遵守这种一般模式,即在依附于模型的管理器上调用方法,执行相应的查询。
14.过滤数据:filter() 方法过滤数据,返回一个查询集合
- 注意,查找操作默认使用 SQL = 运算符做精确匹配查找。
Publisher.objects.filter(name__contains="press")
- 注意, name 和 contains 之间有两个下划线。与 Python 一样,Django 使用双下划线表示“魔法”操作。这里,Django 把 __contains 部分转换成 SQL LIKE 语句:
SELECT id, name, address, city, state_province, country, website
FROM books_publisher
WHERE name LIKE '%press%';
- 支持的其他查找类型有: icontains (不区分大小写的 LIKE ), startswith 和 endswith,以及 range (SQLBETWEEN 语句)
15.检索单个对象:get()
Publisher.objects.get(country="U.S.A.")
得到多个对象的查询和不返回结果都报错。
16.排序数据: order_by() 方法
1.如果想根据多个字段排序(以第一个字段排不出顺序时使用第二个字段),提供多个参数
2.还可以反向排序。方法是在字段名称前面加上“-”(减号)
3.虽然 order_by() 有一定的灵活性,但是每次都调用它相当繁琐。多数时候,我们始终使用同一个字段排序。
class Meta:
ordering = ['name']
- 内嵌在 Publisher 类定义体中的 class Meta (即要缩进,放在 class Publisher 内部)。任何模型都可以使用 Meta 类指定多个针对所在模型的选项。指定这个选项后,使用 Django 数据库 API 检索 Publisher 对象时,如果没有明确调用 order_by() ,都按照 name 字段排序。
17.可以将过滤和排序一起执行:
Publisher.objects.filter(country="U.S.A.").order_by("-name")
18.切片数据:
Publisher.objects.filter(country="U.S.A.").order_by("-name")
19.只更新需要修改的值: update() 方法有返回值,是一个整数,表示修改的记录数量
Publisher.objects.filter(id=52).update(name='ApressPublishing')
20.删除对象:从数据库中删除一个对象,只需在对象上调用 delete() 方法
p = Publisher.objects.get(name="O'Reilly")
p.delete()
Publisher.objects.filter(country='USA').delete()
Publisher.objects.all().delete()
21.自定义标注的方式是为模型字段指定verbose_name 参数
(不太明白标注是什么,待补充)
22.自定义修改列表:
默认情况下,在后台的修改列表显示的是各个对象的
__str__
() 方法返回的结果。可以改进这种默认行为,在修改列表中添加几个其他字段。比如说,可以在列表中显示作者的电子邮件地址;另外,如果能按照名字和姓排序就好了。为此,要为 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)
- list_display ,把它的值设为一个元组,指定要在修改列表页面
显示的字段名称。当然,模型中必须有这些字段。
- 修改 admin.site.register() 调用,在 Author 后面添加 AuthorAdmin 。你可以把这行代码理解为“以 AuthorAdmin 中的选项注册 Author 模型”。 admin.site.register() 函数的第二个参数可选,其值是一个ModelAdmin 子类。如果不指定第二个参数( Publisher 和 Book 模型就是这样),Django 使用默认选项注册模型。
23.添加一个简单的搜索框。在 AuthorAdmin 类中添加 search_fields :
class AuthorAdmin(admin.ModelAdmin):
list_display = ('first_name', 'last_name', 'email')
search_fields = ('first_name', 'last_name')
24.添加过滤器:
1.为 list_filter 属性赋值一个字段元组,在修改列表页面的右边创建过滤器。
class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'publisher', 'publication_date')
list_filter = ('publication_date',)
2。提供日期过滤器的另一种方法是使用date_hierarchy 选项,如下所示:
class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'publisher','publication_date')
list_filter = ('publication_date',)
date_hierarchy = 'publication_date'
- 添加这个选项之后,修改列表上边会显示一个日期层级导航栏,这个导航栏先显示年份,然后向下显示月份和具体某一天。
25.修改默认排序
修改默认的排序方式,让修改列表页面的图书始终以出版日期倒序排列。默认情况下,修改列表根据模型中class Meta 里的 ordering 属性排序,不过我们没设定,因此没有顺序。
class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'publisher','publication_date')
list_filter = ('publication_date',)
date_hierarchy = 'publication_date'
ordering = ('-publication_date',)
- ModelAdmin 子类中的 ordering 选项与模型的 class Meta 中的 ordering 属性的作用完全一样,不过只使用列表中的第一个字段名称。 ordering 选项的值是一个字段名称列表或元组,如果想倒序,加上减号即可。
26.定制字段的排序方式:
class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'publisher', 'publication_date')
list_filter = ('publication_date',)
date_hierarchy = 'publication_date'
ordering = ('-publication_date',)
- fields 选项还有一个作用:排除特定的字段,禁止编辑。只需去掉想排除的字段即可。
27.定制多对多关系字段
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_horizontal 可以指定多个字段,在元组中列出各个字段的名称即可。
filter_vertical
选项,它的作用与 filter_horizontal 完全一样,不过得到的JavaScript 界面是纵向排列的两个选择框,而不是横向的。
- 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',)
- 这个选项的值是一个外键字段名称元组,各个字段在管理后台中显示为简单的文本输入框( <inputtype="text"> ),而不是