mvc
model view control
django-admin startproject
在當前目錄創建一個項目框架
python manage.py startapp appname
在當前目錄創建一個app框架
因為缺少setuptools模塊跳出ImportError,安裝setupuptools解決。
常用正則表達式
.
匹配任意字符
[a-zA-Z]
匹配a-z不區分大小寫
+
匹配一次或者多次
?
匹配零次或者一次
*
匹配零次或者多次
\d
匹配數字
[^a]
匹配不為a的字符
{1,3}
匹配之前表達式1-3次
關于模型
每個模型都上一個繼承自django.db.models.Model
類的實例。
每一個類的屬性表示數據庫的字段。
字段通過Field類的實例表示,如下所示
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實例表示該字段數據的類型,第一個可選參數是一個字符串用以人類可讀,若不給就是實例的名字。
ForeignKey
表示每個Choice關聯一個Question
python manage.py makemigrations polls
運行makemigrations說明已經創建了新的模型,并且將這個行為儲存為一個遷移文件。
python manage.py sqlmigrate polls 0001
執行這條命令會返回遷移文件對應的數據庫命令。
python manage.py check
用于檢查項目中的模型是否有問題。
python manage.py migrate
創建模型所對應的表。
為每個模型定義一個__str__
方法,這樣Question.objects.all()
返回的就是可以區別各個模型項的信息。
在管理頁面中注冊模型
在admin.py中通過admin.site.register(Question)
來注冊相應的模型。
關于模板
setting.py
配置了context_prosessors
這上一個可調用函數的默認的元組,以request
對象作為參數,返回一個傳給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的默認配置
關于轉義
django一般會幫你轉義和html沖突的字符,以得到正確的顯示,如果不希望進行轉義,可以在通過管道符添添加一個safe
若希望對一個塊區域轉義是否,可以使用autoescape
標簽,記得要關閉標簽。
{% autoescape off %}
這里的不會被轉義
{% autoescape on %}
這里的會被轉義
{% endescape %}
{% endescape %}
在每個{% for %}
循環中有一個forloop
模板變量,這個變量有一些關于循環的信息。
forloop.counter
當前循環次數,第一次為1
forloop.counter0
當前循環次數,第一次為0
forloop.recounter
剩余循環次數,最后一次為1
forloop.recounter0
剩余循環次數,最后一次為0
forloop.first
如果循環是第一次執行,那么它被設置為True
forloop.last
如果循環是最后一次執行,那么它會被設置為True
forloop.parentloop
指向上一級循環的forloop
對象
forloop
只能在循環中使用。
{% ifequal %}
比較兩個值,相等是顯示{% ifequal %}
和 {% endifequal %}之間的內容,只有模板變量,字符串,證書和小數可以作為其參數。
{# 這是模板注釋的用法 #}
,模板注釋不能跨越多行,如果要多行注釋,可以使用{% comment %}
{% endcomment %}
模板標簽。
過濾器
{{ name|lower }}
模板過濾器用來在變量顯示前修改它的值的一個簡易方法,這里顯示的內容是變量{{ name }}
被過濾器lower
處理后的結果,它的功能是轉換為小寫,過濾器可以嵌套使用。
,有些過濾器需要參數,參數使用方法如下:
{{ bio|truncatewords:'30' }}
這將顯示變量{{ bio }}
的前30個詞。
點擊查看各種過濾器
{% include %}
該模板標簽允許模板中可以包含其他模板的內容。
{% extends %}
集成一個基礎模板。、
{% block %}
在子模板中使用這個標簽可以覆蓋基礎模板中相應的標簽,如果希望在基礎模板的內容上添加內容,可以在子模板的{% block %}
中使用{{ block.super }}
關于setting.py
首先這里是官方數據庫配置文檔,遇到問題可以查閱。
部署的時候
DEBUG = False
ADMINS = [('John', 'john@example.com'), ('Mary', 'mary@example.com')]
INSTALLED_APPS
Django中激活的應用的名字都保存在這里,以下上1.10.1默認的配置。
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
django.contrb.admin
這是管理站點的應用。
django.contrib.auth
這是認證系統應用。
django.contrib.contenttypes
用與內容類型的框架
django.contrib.sessions
關于會話的應用
django.contrib.messages
關于消息的應用
django.contrib.staticfiles
管理靜態文件的應用
數據庫
這里是ubuntu官方關于postgresql的用法
附錄B 關于數據庫 模型語法和字段類型
附錄C 關于django中數據庫API
django發送email
首先在setting.py內配置eamil相關信息。
send_email
參數
關于CSFR權限問題
關于views.py
django.http.HttpResponse
返回一個string,參數為string
django.http.HttpResponseRedirect
重定向到一個路由,參數為一個路由。
關于forms.py
django為每一個表單創建了一個form類
django.forms.Form()
實例方法
假設f是實例
f.is_bound
查看實例是否綁定數據
f.is_valid()
返回布爾值,是否合法
f.errors
字段和出錯消息映射表
f[string].errors
單獨字段的出錯信息
f.cleaned_data
通過驗證后,這個屬性上一個提交數據的字典
在表單定義里定義一個clean_開頭,字段名稱結束的方法,是自定義的驗證方法。
subject = forms.CharField()
email = forms.EmailField(required=False,label="your email address!")
message = forms.CharField(widget=forms.Textarea)```
`label`自定義字段在頁面中顯示的標簽
#### 關于靜態文件
每個應用文件夾下應有一個`static/appname/static/` 文件夾,靜態文件在這里管理。
模板在`<head>`使用`{% load staticfiles %}`,然后在后面
`<link rel='stylesheet' type='text/css' href={% static 'appname/static/<staticfile> %}`