1. 程式人生 > >django前後端交互

django前後端交互

dict 一個 要求 ext 初始化 .post 鏈接 百萬 sep

  • 創建一個apps
  • 在當前項目文件下,啟動dos窗口。執行python manage.py startapp investigate
  • pycharm->tools->Run mange.py Task...出現類似於命令行窗口,執行startapp investigate
  • 配置apps

在settings.py 的 INSTALL_APP配置中指定,在該列表中添加你剛剛新建的app名稱。

靜態資源導入

  • 資源
  • template目錄中創建html
  • 創建static目錄,並在該目錄中創建css、images、JavaScript目錄
  • django提供【django.contrib.staticfiles】來管理靜態文件
  • 資源配置

settings配置:STATIC_URL/STATICFILES_DIRS

STATIC_URL = ‘/static/‘
STATICFILES_DIRS = [
    os.path.join(BASE_DIR,‘STATIC‘)
]

Django的路由功能

  • 路由是根據不同的url地址展示不同的內容或頁面,一般在【urls.py】中配置訪問的URL
EG:
urlpatterns = [
    url(r‘^admin‘,admin.site.urls),
    url(
r‘^form/$‘,inverstigate)#inverstigate為你的路由路徑 ] # 具體url配置也可參考urls.py中的註釋內容
  • Django中的urls和views的關系
  • urls中配置的url調用views中的方法
  • render函數將想要交給前端的數據,交給模板

創建Model

  • 根據業務需求創建名為【UserInfo】的Model
  • 【UserInfo】是【investigate】中的一個Model,Model與app為多對一的關系
  • 為【UserInfo】創建字段【Field】。
  • 常用的字段類型清單
名稱
說明
AutoField 一個自動遞增的整型字段,添加記錄時它會自動增長。你通常不需要直接使用這個字段;如果你不指定主鍵的話,系統會自動添加一個主鍵字段到你的model。(參閱自動主鍵字段)
BooleanField 布爾字段,管理工具裏會自動將其描述為checkbox
CharField 字符串字段,單行輸入,用於較短的字符串,如要保存大量文本, 使用 TextField;CharField有一個必填參數:CharField.max_length:字符的最大長度,django會根據這個參數在數據庫層和校驗層限制該字段所允許的最大字符數。
TextField 一個容量很大的文本字段, admin 管理界面用 <textarea>多行編輯框表示該字段數據。
CommaSeparatedIntegerField 用於存放逗號分隔的整數值。類似 CharField,必須maxlength 參數。
DateField 日期字段
DateTimeField 類似 DateField 支持同樣的附加選項。
EmailField 一個帶有檢查 Email 合法性的 CharField,不接受 maxlength 參數。
FileField 一個文件上傳字段。 要求一個必須有的參數: upload_to, 一個用於保存上載文件的本地文件系統路徑。
FilePathField 選擇指定目錄按限制規則選擇文件,有三個參數可選, 其中”path”必需的,這三個參數可以同時使用
FloatField 浮點型字段。 必須提供兩個 參數, 參數描述:max_digits:總位數(不包括小數點和符號) decimal_places:小數位數。如:要保存最大值為 999 (小數點後保存2位),你要這樣定義字段:models.FloatField(…,max_digits=5, decimal_places=2),要保存最大值一百萬(小數點後保存10位)的話,你要這樣定義:models.FloatField(…,max_digits=19, decimal_places=10)
ImageField 類似 FileField, 不過要校驗上傳對象是否是一個合法圖片。它有兩個可選參數:height_field 和 width_field,如果提供這兩個參數,則圖片將按提供的高度和寬度規格保存。 該字段要求 Python Imaging 庫。
IntegerField 用於保存一個整數。
IPAddressField 一個字符串形式的 IP 地址, (如 “202.1241.30″)。
NullBooleanField 類似 BooleanField, 不過允許 NULL 作為其中一個選項。 推薦使用這個字段而不要用 BooleanField 加 null=True 選項。 admin 用一個選擇框 <select> (三個可選擇的值: “Unknown”, “Yes” 和 “No” ) 來表示這種字段數據。
PhoneNumberField 一個帶有合法美國風格電話號碼校驗的 CharField(格式:XXX-XXX-XXXX)。
PositiveIntegerField 類似 IntegerField, 但取值範圍為非負整數(這個字段應該是允許0值的…可以理解為無符號整數)
PositiveSmallIntegerField 正小整型字段,類似 PositiveIntegerField, 取值範圍較小
SlugField 是一個報紙術語. slug 是某個東西的小小標記(短簽), 只包含字母,數字,下劃線和連字符.它們通常用於URLs。
SmallIntegerField 類似 IntegerField, 不過只允許某個取值範圍內的整數。(依賴數據庫)
TimeField 時間字段,類似於 DateField 和 DateTimeField。
URLField 用於保存 URL。 若 verify_exists 參數為 True (默認), 給定的 URL 會預先檢查是否存在(即URL是否被有效裝入且沒有返回404響應)。
USStateField 美國州名縮寫,由兩個字母組成。
XMLField XML字符字段,校驗值是否為合法XML的 TextField,必須提供參數:schema_path:校驗文本的 RelaxNG schema 的文件系統路徑。
  • Field選項說明
選項說明
null 缺省設置為false.通常不將其用於字符型字段上,比如CharField,TextField上.字符型字段如果沒有值會返回空字符串。
blank 該字段是否可以為空。如果為假,則必須有值
choices 一個用來選擇值的2維元組。第一個值是實際存儲的值,第二個用來方便進行選擇。如SEX_CHOICES= ((‘F’,‘Female’),(‘M’,‘Male’),)
core db_column,db_index 如果為真將為此字段創建索引
default 設定缺省值
editable 如果為假,admin模式下將不能改寫。缺省為真
help_text admin模式下幫助文檔
primary_key 設置主鍵,如果沒有設置django創建表時會自動加上ID作為主鍵
radio_admin 用於admin模式下將select轉換為radio顯示。只用於ForeignKey或者設置了choices
unique 數據唯一
unique_for_date 日期唯一,如下例中系統將不允許title和pub_date兩個都相同的數據重復出現 title = meta.CharField(maxlength=30,unique_for_date=’pub_date’)
unique_for_month / unique_for_year 用法同上
validator_list 有效性檢查。非有效產生 django.core.validators.ValidationError 錯誤

初始化Model

  • settings配置:DATABASES中鍵入你的數據庫信息(假如使用sqlite則保持原有配置即可)
EG:
DATABASES = {
    ‘default‘: {
        ‘ENGINE‘: ‘django.db.backends.mysql‘, #驅動名稱
        ‘NAME‘: ‘‘,#數據庫名稱
        ‘USER‘: ‘‘, #數據庫用戶名
        ‘PASSWORD‘: ‘‘, #用戶名密碼
        ‘HOST‘: ‘‘, #主機地址
        ‘PORT‘: ‘‘, #端口號
    }
}
  • 在命令行(若有疑問請查看上文關於app的創建)執行makemigrations、migrate 初始化Django框架中隱含的表文件
  • 同上執行makemigrations、migrate investigate,初始化你剛剛創建的Model。

創建views

  • 創建showform函數,
def showform(request):
    if request.method == "POST":
        res_data = request.POST # 獲取for表單提交數據 
        ret = data_mod(res_data)
        models.UserInfo.objects.create(**ret)
    return render(request,‘form.html‘)
  • 創建data_mod函數
def data_mod(rets):
    ret_data={}
    for k_ret,v_ret in rets.items():
        if k_ret != ‘csrfmiddlewaretoken‘:
            mid = {k_ret:v_ret}
            ret_data.update(mid)
    return ret_data
  • run mysite
  • 打開瀏覽器輸入127.0.0.1:8000/form/查看效果
  • 在web中輸入你的個人信息,點擊提交字段不能為空,若想填寫為空值,可以參考Field選項,在Model創建時設定default值
  • 查看數據是否存儲成功數據可視化工具可隨意,推薦Navicat for MySQL

效果展示

技術分享圖片 web
技術分享圖片 database

問題思考

  • 前端數據與後臺交互時,采用什麽方式更加安全合理?
  • 在form表單提交前設置,若填寫信息為空則提示用戶
  • form表單提交數據用request.POST修改會報異常(This QueryDict instance is immutable)


作者:羽恒
鏈接:https://www.jianshu.com/p/7917dd6c3b95
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權並註明出處。

django前後端交互