day23 Model 操做,Form 驗證以及序列化操做

 

 

 

 

 

 

 

 

 

 

 

 

 

Model 操做html

1建立數據庫表python

     定製表名:ajax

     

      普通索引:
            建立兩個普通索引,這樣就會生成兩個索引文件

     

   聯合索引:
          爲了只生成一個索引文件,才建立的聯合索引,聯合索引的壞處就是必須按順序從左匹配,只要不是從最左列開始查詢的數據就不會走索引。

      聯合惟一索引:sql

          只是在聯合索引的基礎上加了一個unique =True數據庫

 

 數據庫的查找:django

外鍵的正向查找:json

 

反向查找:app

 

反向查找指定字段數據:函數

 

指定反向查找的別名:性能

 

 在刪除外鍵約束的表中的數據時,是否刪除另外一張表在使用此數據的數據:

 

 判讀數據庫中的數據是否爲空:

like

between

 

 

 

 

統計,求和,最大值,最小值

 

 

 

 

 

 

 

 

 

 

若是你在取這些結果中沒有的其餘列的數據,Django 會再去數據庫操做,可是這樣性能就不行了。

 

 本身指定鏈接那個數據庫:

 

 等於:

 

 

 

性能相關:

 正常的取會循環一次取一次ut裏的name  性能不行,因此須要加上  就會一次全取出來,能夠加參數來選擇取哪一個關聯表的數據

 

指定ut 鏈接表:

 

只獲取必須數據:

 

 

 

截取時間,生成想獲得的格式:


更細粒度的截取及時區轉換:

 

執行原生sql:

 

 

 

 

 

 

 

 

 Form 驗證:

 

 

 Form 功能:

 

 

 建立一個完整的數據,爲靜態的數據,當須要修改時就須要修改此class:

 

從數據庫獲取數據,只是第一次會獲取最新數據,也就是說數據庫在更新後須要重啓程序:

 

重構下from:
不須要重啓:

 

 

 實踐:

1 forms:

 

from django import forms
from django.forms import fields
from django.forms import widgets
from app01 import models
class UserInfoForm(forms.Form):
    user = fields.CharField(
        required=False,
        widget=widgets.Textarea(attrs={'class':'user'})
    )
    pwd = fields.CharField(
        max_length=12,
        widget=widgets.PasswordInput(attrs={'class':'pwd'})
    )
    #1
    user_type = fields.ChoiceField(
        choices=[],
        widget=widgets.Select
    )
    #2
    user_type2 = fields.CharField(
       widget=widgets.Select(choices=[])
    )
    def __init__(self,*args,**kwargs):
        super(UserInfoForm,self).__init__(*args,**kwargs)
        self.fields['user_type'].choices = models.UserType.objects.values_list('id','name')
        self.fields['user_type2'].widget.choices = models.UserType.objects.values_list('id','name')

views:

from django.shortcuts import render
# Create your views here.
def inedex(request):
    from  app01.forms import UserInfoForm
    obj = UserInfoForm()
    return render(request,'index.html',{'obj':obj})

html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <p>{{ obj.user }}</p>
    <p>{{ obj.pwd }}</p>
    <p>{{ obj.user_type }}</p>
    <p>{{ obj.user_type2 }}</p>
</body>
</html>

  

傳入參數設置默認值(初始化操做,當打開頁面時,select框選擇的結果):

 

form 的更深層次驗證,自定義驗證:

 

 

 

 

 
錯誤信息捕獲:

 

 

總結:

 

 

 序列化操做:

當一個數據不全是python 的數據類型,而是有其餘的數據類型,json 就不能序列化此數據,因此須要更細粒度的控制:

使用json 的 default 函數執行細粒度的操做:

給ajax 返回數據時要返回json 可是有一些數據是Django 特有的數據類型,因此須要自定義函數來處理這些數據:

 

 

 

 

 

相關文章
相關標籤/搜索