Admin和Models
二、Models
1.Django Model
每一个Django Model都继承自django.db.models.Model #一个包,不用在意
在Model当中每一个属性attribute都代表一个database field
# Model.后面的即为属性
ex:name=models.CharField(max_length=100) CharField即为属性
review: python中的类
通过Django Model API可以执行数据库的增删改查, 而不需要写一些数据库的查询语句
2.设置数据库
Django项目建成后, 默认设置了使用SQLite数据库, 在my_blog/my_blog/settings.py中可以查看和修改数据库设置:
DATABASES = {'default': {'ENGINE':'django.db.backends.sqlite3','NAME': os.path.join(BASE_DIR,'db.sqlite3'), }}
还可以设置其他数据库, 如MySQL, PostgreSQL, 现在为了简单, 使用默认数据库设置
# os.path.join() 将括号里的参数合并成目录
3.创建models
在my_blog/article/models.py下编写如下程序:
其中__str__(self)函数Article对象要怎么表示自己, 一般系统默认使用来表示对象, 通过这个函数可以告诉系统使用title字段来表示这个对象
CharField 用于存储字符串, max_length设置最大长度
TextField 用于存储大量文本
DateTimeField 用于存储时间, auto_now_add设置True表示自动设置对象增加时间
有了这些代码,Django就能够自动完成以下两个功能:
为该应用创建数据库表(CREATE TABLE语句)。
为Question对象和Choice对象创建一个访问数据库的python API。
4.同步数据库
$ python manage.py migrate #命令行运行该命令
因为我们已经执行过该命令会出现如下提示
Operations to perform:
Apply all migrations: admin, contenttypes, sessions, auth
Running migrations:
No migrations to apply.
Your models have changes that arenotyet reflectedina migration,andso won't be applied.
Run 'manage.py makemigrations' to make new migrations, and then re-run 'manage.py migrate' to apply them.
那么现在需要执行下面的命令
$ python manage.py makemigrations #得到如下提示
Migrationsfor'article':0001_initial.py:- Create model Article
这是通过运行makemigrations告诉Django,已经对模型做了一些更改(在这个例子中,你创建了一个新的模型)并且会将这些更改记录为迁移文件。
迁移是 Django 如何储存模型的变化(以及您的数据库模式),它们只是磁盘上的文件。如果愿意,你可以阅读这些为新模型建立的文件;这个迁移文件就是polls/migrations/0001_initial.py。不用担心,Django不要求你在每次Django生成迁移文件之后都要阅读这些文件,但是它们被设计成可人为编辑的形式,以便你可以手工稍微修改一下Django的某些具体行为。READ MORE
有一个命令可以运行这些迁移文件并自动管理你的数据库模式 —— 它叫做migrate
现在重新运行以下命令
$ python manage.py migrate#出现如下提示表示操作成功
Operations toperform:Apply allmigrations:auth, sessions, admin, article, contenttypes
Running migrations:Applying article.0001_initial... OK
migrate命令按照app顺序建立或者更新数据库, 将models.py与数据库同步
迁移功能非常强大,可以让你在开发过程中不断修改你的模型而不用删除数据库或者表然后再重新生成一个新的 —— 它专注于升级你的数据库且不丢失数据。我们将在本教程的后续章节对迁移进行深入地讲解,但是现在,请记住实现模型变更的三个步骤:
修改你的模型(在models.py文件中)。
运行pythonmanage.pymakemigrations,为这些修改创建迁移文件
运行pythonmanage.pymigrate,将这些改变更新到数据库中。
5.Django Shell
现在我们进入Django中的交互式shell来进行数据库的增删改查等操作
$ python manage.py shell
Python3.4.2(v3.4.2:ab2c023a9432, Oct52014,20:42:22)
[GCC4.2.1(Apple Inc. build5666) (dot3)] on darwin
Type"help","copyright","credits"or"license"formore information.
(InteractiveConsole)>>>
这里进入Django的shell和python内置的shell是非常类似的
当然还有更多的API, 可以查看官方文档,退出只需要输入quit()
一般系统默认使用<Article: Article object>来表示对象
三、Admin
1.Admin简介
Django有一个优秀的特性, 内置了Django admin后台管理界面, 方便管理者进行添加和删除网站的内容.
2.设置Admin
新建的项目系统已经为我们设置好了后台管理功能
可以在my_blog/my_blog/settings.py中查看
INSTALLED_APPS= (
'django.contrib.admin',#默认添加后台管理功能
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'article')
同时也已经添加了进入后台管理的url, 可以在my_blog/my_blog/urls.py中查看
# -*- coding: utf-8 -*-
from django.conf.urls import url
from django.contrib import admin
urlpatterns = [# Examples:
# url(r'^$', 'my_blog.views.home', name='home'),
# url(r'^blog/', include('blog.urls')),url(r'^admin/', admin.site.urls),
#可以使用设置好的url进入网站后台]
3.创建超级用户
使用如下命令账号创建超级用户(如果使用了python manage.py syncdb会要求你创建一个超级用户, 该命令已经过时, 不再推荐使用)
$ python manage.py createsuperuser
Username (leave blank touse'andrew_liu'): root
Email address:Password:Password(again):
Superuser created successfully.
输入用户名, 邮箱, 密码就能够创建一个超级用户
启动应用:
$ python manage.py runserverlocalhost:9000
现在可以在浏览器中输入localhost:9000/admin输入账户和密码进入后台管理, 如下:
登陆进入
让poll应用在管理站点中可编辑¶
但我们的poll应用在哪儿?它没有显示在管理站点的首页面上。
只需要做一件事:我们需要告诉管理站点Question对象要有一个管理界面。
但是你会发现并没有数据库信息的增加和删除, 现在我们在my_blog/article/admin.py中增加代码:
from django.contrib import admin
from article.models import Article
# Register your models here.
admin.site.register(Article)
保存后, 再次刷新页面,localhost:9000/admin