Django學習筆記

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>  %}`
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容