二镀裤、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可以執(zhí)行數(shù)據(jù)庫的增刪改查, 而不需要寫一些數(shù)據(jù)庫的查詢語句
2.設(shè)置數(shù)據(jù)庫
Django項目建成后, 默認設(shè)置了使用SQLite數(shù)據(jù)庫, 在my_blog/my_blog/settings.py中可以查看和修改數(shù)據(jù)庫設(shè)置:
DATABASES = {'default': {'ENGINE':'django.db.backends.sqlite3','NAME': os.path.join(BASE_DIR,'db.sqlite3'),? ? }}
還可以設(shè)置其他數(shù)據(jù)庫, 如MySQL, PostgreSQL, 現(xiàn)在為了簡單, 使用默認數(shù)據(jù)庫設(shè)置
# os.path.join() 將括號里的參數(shù)合并成目錄
3.創(chuàng)建models
在my_blog/article/models.py下編寫如下程序:
其中__str__(self)函數(shù)Article對象要怎么表示自己, 一般系統(tǒng)默認使用來表示對象, 通過這個函數(shù)可以告訴系統(tǒng)使用title字段來表示這個對象
CharField 用于存儲字符串, max_length設(shè)置最大長度
TextField 用于存儲大量文本
DateTimeField 用于存儲時間, auto_now_add設(shè)置True表示自動設(shè)置對象增加時間
有了這些代碼肢扯,Django就能夠自動完成以下兩個功能:
為該應用創(chuàng)建數(shù)據(jù)庫表(CREATE TABLE語句)芦倒。
為Question對象和Choice對象創(chuàng)建一個訪問數(shù)據(jù)庫的python API轰豆。
4.同步數(shù)據(jù)庫
$ python manage.py migrate #命令行運行該命令
因為我們已經(jīng)執(zhí)行過該命令會出現(xiàn)如下提示
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.
那么現(xiàn)在需要執(zhí)行下面的命令
$ python manage.py makemigrations #得到如下提示
Migrationsfor'article':0001_initial.py:- Create model Article
這是通過運行makemigrations告訴Django,已經(jīng)對模型做了一些更改(在這個例子中弓千,你創(chuàng)建了一個新的模型)并且會將這些更改記錄為遷移文件衡便。
遷移是 Django 如何儲存模型的變化(以及您的數(shù)據(jù)庫模式),它們只是磁盤上的文件洋访。如果愿意镣陕,你可以閱讀這些為新模型建立的文件;這個遷移文件就是polls/migrations/0001_initial.py捌显。不用擔心,Django不要求你在每次Django生成遷移文件之后都要閱讀這些文件总寒,但是它們被設(shè)計成可人為編輯的形式扶歪,以便你可以手工稍微修改一下Django的某些具體行為。READ MORE
有一個命令可以運行這些遷移文件并自動管理你的數(shù)據(jù)庫模式 —— 它叫做migrate
現(xiàn)在重新運行以下命令
$ python manage.py migrate#出現(xiàn)如下提示表示操作成功
Operations toperform:Apply allmigrations:auth, sessions, admin, article, contenttypes
Running migrations:Applying article.0001_initial... OK
migrate命令按照app順序建立或者更新數(shù)據(jù)庫, 將models.py與數(shù)據(jù)庫同步
遷移功能非常強大摄闸,可以讓你在開發(fā)過程中不斷修改你的模型而不用刪除數(shù)據(jù)庫或者表然后再重新生成一個新的 —— 它專注于升級你的數(shù)據(jù)庫且不丟失數(shù)據(jù)善镰。我們將在本教程的后續(xù)章節(jié)對遷移進行深入地講解,但是現(xiàn)在年枕,請記住實現(xiàn)模型變更的三個步驟:
修改你的模型(在models.py文件中)炫欺。
運行pythonmanage.pymakemigrations,為這些修改創(chuàng)建遷移文件
運行pythonmanage.pymigrate熏兄,將這些改變更新到數(shù)據(jù)庫中品洛。
5.Django Shell
現(xiàn)在我們進入Django中的交互式shell來進行數(shù)據(jù)庫的增刪改查等操作
$ 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內(nèi)置的shell是非常類似的
當然還有更多的API, 可以查看官方文檔,退出只需要輸入quit()
一般系統(tǒng)默認使用<Article: Article object>來表示對象
三摩桶、Admin
1.Admin簡介
Django有一個優(yōu)秀的特性, 內(nèi)置了Django admin后臺管理界面, 方便管理者進行添加和刪除網(wǎng)站的內(nèi)容.
2.設(shè)置Admin
新建的項目系統(tǒng)已經(jīng)為我們設(shè)置好了后臺管理功能
可以在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')
同時也已經(jīng)添加了進入后臺管理的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),
#可以使用設(shè)置好的url進入網(wǎng)站后臺]
3.創(chuàng)建超級用戶
使用如下命令賬號創(chuàng)建超級用戶(如果使用了python manage.py syncdb會要求你創(chuàng)建一個超級用戶, 該命令已經(jīng)過時, 不再推薦使用)
$ python manage.py createsuperuser
Username (leave blank touse'andrew_liu'): root
Email address:Password:Password(again):
Superuser created successfully.
輸入用戶名, 郵箱, 密碼就能夠創(chuàng)建一個超級用戶
啟動應用:
$ python manage.py runserverlocalhost:9000
現(xiàn)在可以在瀏覽器中輸入localhost:9000/admin輸入賬戶和密碼進入后臺管理, 如下:
登陸進入
讓poll應用在管理站點中可編輯?
但我們的poll應用在哪兒桥状?它沒有顯示在管理站點的首頁面上。
只需要做一件事:我們需要告訴管理站點Question對象要有一個管理界面硝清。
但是你會發(fā)現(xiàn)并沒有數(shù)據(jù)庫信息的增加和刪除, 現(xiàn)在我們在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