mvc
model view control
django-admin startproject
在當(dāng)前目錄創(chuàng)建一個(gè)項(xiàng)目框架
python manage.py startapp appname
在當(dāng)前目錄創(chuàng)建一個(gè)app框架
因?yàn)槿鄙賡etuptools模塊跳出ImportError塑娇,安裝setupuptools解決蹬耘。
常用正則表達(dá)式
.
匹配任意字符
[a-zA-Z]
匹配a-z不區(qū)分大小寫
+
匹配一次或者多次
?
匹配零次或者一次
*
匹配零次或者多次
\d
匹配數(shù)字
[^a]
匹配不為a的字符
{1,3}
匹配之前表達(dá)式1-3次
關(guān)于模型
每個(gè)模型都上一個(gè)繼承自django.db.models.Model
類的實(shí)例涯捻。
每一個(gè)類的屬性表示數(shù)據(jù)庫的字段乘盼。
字段通過Field類的實(shí)例表示,如下所示
from django.db import models #default
# Create your models here.
class Question(models.Model):
question_text = models.CharField(max_length=200)
published_date = models.DateTimeField('date published')
class Choice(models.Model):
question = models.ForeignKey(Question)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
不同的Field實(shí)例表示該字段數(shù)據(jù)的類型,第一個(gè)可選參數(shù)是一個(gè)字符串用以人類可讀,若不給就是實(shí)例的名字财搁。
ForeignKey
表示每個(gè)Choice關(guān)聯(lián)一個(gè)Question
python manage.py makemigrations polls
運(yùn)行makemigrations說明已經(jīng)創(chuàng)建了新的模型,并且將這個(gè)行為儲(chǔ)存為一個(gè)遷移文件躬络。
python manage.py sqlmigrate polls 0001
執(zhí)行這條命令會(huì)返回遷移文件對(duì)應(yīng)的數(shù)據(jù)庫命令尖奔。
python manage.py check
用于檢查項(xiàng)目中的模型是否有問題。
python manage.py migrate
創(chuàng)建模型所對(duì)應(yīng)的表穷当。
為每個(gè)模型定義一個(gè)__str__
方法提茁,這樣Question.objects.all()
返回的就是可以區(qū)別各個(gè)模型項(xiàng)的信息。
在管理頁面中注冊模型
在admin.py中通過admin.site.register(Question)
來注冊相應(yīng)的模型馁菜。
關(guān)于模板
setting.py
配置了context_prosessors
這上一個(gè)可調(diào)用函數(shù)的默認(rèn)的元組茴扁,以request
對(duì)象作為參數(shù),返回一個(gè)傳給context
的字典汪疮。
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(os.path.dirname(__file__),'templates').replace('\\','/')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
以上上1.10.2的默認(rèn)配置
關(guān)于轉(zhuǎn)義
django一般會(huì)幫你轉(zhuǎn)義和html沖突的字符峭火,以得到正確的顯示,如果不希望進(jìn)行轉(zhuǎn)義智嚷,可以在通過管道符添添加一個(gè)safe
若希望對(duì)一個(gè)塊區(qū)域轉(zhuǎn)義是否卖丸,可以使用autoescape
標(biāo)簽,記得要關(guān)閉標(biāo)簽盏道。
{% autoescape off %}
這里的不會(huì)被轉(zhuǎn)義
{% autoescape on %}
這里的會(huì)被轉(zhuǎn)義
{% endescape %}
{% endescape %}
在每個(gè){% for %}
循環(huán)中有一個(gè)forloop
模板變量稍浆,這個(gè)變量有一些關(guān)于循環(huán)的信息。
forloop.counter
當(dāng)前循環(huán)次數(shù),第一次為1
forloop.counter0
當(dāng)前循環(huán)次數(shù)粹湃,第一次為0
forloop.recounter
剩余循環(huán)次數(shù),最后一次為1
forloop.recounter0
剩余循環(huán)次數(shù)泉坐,最后一次為0
forloop.first
如果循環(huán)是第一次執(zhí)行为鳄,那么它被設(shè)置為True
forloop.last
如果循環(huán)是最后一次執(zhí)行,那么它會(huì)被設(shè)置為True
forloop.parentloop
指向上一級(jí)循環(huán)的forloop
對(duì)象
forloop
只能在循環(huán)中使用腕让。
{% ifequal %}
比較兩個(gè)值孤钦,相等是顯示{% ifequal %}
和 {% endifequal %}之間的內(nèi)容,只有模板變量纯丸,字符串偏形,證書和小數(shù)可以作為其參數(shù)。
{# 這是模板注釋的用法 #}
觉鼻,模板注釋不能跨越多行俊扭,如果要多行注釋,可以使用{% comment %}
{% endcomment %}
模板標(biāo)簽坠陈。
過濾器
{{ name|lower }}
模板過濾器用來在變量顯示前修改它的值的一個(gè)簡易方法萨惑,這里顯示的內(nèi)容是變量{{ name }}
被過濾器lower
處理后的結(jié)果,它的功能是轉(zhuǎn)換為小寫仇矾,過濾器可以嵌套使用庸蔼。
,有些過濾器需要參數(shù)贮匕,參數(shù)使用方法如下:
{{ bio|truncatewords:'30' }}
這將顯示變量{{ bio }}
的前30個(gè)詞姐仅。
點(diǎn)擊查看各種過濾器
{% include %}
該模板標(biāo)簽允許模板中可以包含其他模板的內(nèi)容。
{% extends %}
集成一個(gè)基礎(chǔ)模板刻盐。掏膏、
{% block %}
在子模板中使用這個(gè)標(biāo)簽可以覆蓋基礎(chǔ)模板中相應(yīng)的標(biāo)簽,如果希望在基礎(chǔ)模板的內(nèi)容上添加內(nèi)容隙疚,可以在子模板的{% block %}
中使用{{ block.super }}
關(guān)于setting.py
首先這里是官方數(shù)據(jù)庫配置文檔壤追,遇到問題可以查閱。
部署的時(shí)候
DEBUG = False
ADMINS = [('John', 'john@example.com'), ('Mary', 'mary@example.com')]
INSTALLED_APPS
Django中激活的應(yīng)用的名字都保存在這里供屉,以下上1.10.1默認(rèn)的配置行冰。
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
django.contrb.admin
這是管理站點(diǎn)的應(yīng)用。
django.contrib.auth
這是認(rèn)證系統(tǒng)應(yīng)用伶丐。
django.contrib.contenttypes
用與內(nèi)容類型的框架
django.contrib.sessions
關(guān)于會(huì)話的應(yīng)用
django.contrib.messages
關(guān)于消息的應(yīng)用
django.contrib.staticfiles
管理靜態(tài)文件的應(yīng)用
數(shù)據(jù)庫
這里是ubuntu官方關(guān)于postgresql的用法
附錄B 關(guān)于數(shù)據(jù)庫 模型語法和字段類型
附錄C 關(guān)于django中數(shù)據(jù)庫API
django發(fā)送email
首先在setting.py內(nèi)配置eamil相關(guān)信息悼做。
send_email
參數(shù)
關(guān)于CSFR權(quán)限問題
關(guān)于views.py
django.http.HttpResponse
返回一個(gè)string,參數(shù)為string
django.http.HttpResponseRedirect
重定向到一個(gè)路由哗魂,參數(shù)為一個(gè)路由肛走。
關(guān)于forms.py
django為每一個(gè)表單創(chuàng)建了一個(gè)form類
django.forms.Form()
實(shí)例方法
假設(shè)f是實(shí)例
f.is_bound
查看實(shí)例是否綁定數(shù)據(jù)
f.is_valid()
返回布爾值,是否合法
f.errors
字段和出錯(cuò)消息映射表
f[string].errors
單獨(dú)字段的出錯(cuò)信息
f.cleaned_data
通過驗(yàn)證后录别,這個(gè)屬性上一個(gè)提交數(shù)據(jù)的字典
在表單定義里定義一個(gè)clean_開頭朽色,字段名稱結(jié)束的方法邻吞,是自定義的驗(yàn)證方法。
subject = forms.CharField()
email = forms.EmailField(required=False,label="your email address!")
message = forms.CharField(widget=forms.Textarea)```
`label`自定義字段在頁面中顯示的標(biāo)簽
#### 關(guān)于靜態(tài)文件
每個(gè)應(yīng)用文件夾下應(yīng)有一個(gè)`static/appname/static/` 文件夾葫男,靜態(tài)文件在這里管理抱冷。
模板在`<head>`使用`{% load staticfiles %}`,然后在后面
`<link rel='stylesheet' type='text/css' href={% static 'appname/static/<staticfile> %}`