前端_Django
?
后臺管理
EasyUI
jqueryUI
? - css
- js
主站
BootStrap
一、響應式
@media? ?根據頁面大小,CSS做出不同響應?
二、圖標字體
@font-face
三、基本使用
bxslide
?
WEB 框架
MVC
Model: 數據庫
View: 模板文件
Controller: 業務處理
MTV:
Model: 數據庫
Template: 模板文件
View: 業務處理
注:
樣式后面加? !important? 強調,優先級最高
1 <style> 2 .no-radus{ 3 border-radius: 0 !important; 4 } 5 </style>?
?
Django 安裝與簡介
- 安裝:pip install django,默認安裝在python的Scripts目錄下
- 添加環境變量:C:\D\program\Python354\Scripts
- CMD中運行,創建Django工程:django-admin.exe startproject mysite(或者 django-admin startproject mysite) 創建mysite目錄;mysite可以換成其他目錄名
- 運行manage.py,啟動Django功能:python manage.py runserver 127.0.0.1:8001
其他常用命令
python manage.py runserver 0.0.0.0 python manage.py startapp appname python manage.py syncdb python manage.py makemigrations python manage.py migrate python manage.py createsuperuserpycharm 運行django方式:
- 專業版pycharm:可以直接創建django項目,然后可以選擇django項目運行
- 非專業版pycharm:不能直接創建django項目,在run圖標左側,選擇manage點擊可看見Edit Configurations,點擊后可看見Parameters,只需配置“runserver 127.0.0.1:8001”,然后保存即可運行manage.
?
app 目錄結構
- 創建app:python manage.py startapp app_name
- migrations: 數據庫操作記錄,只記錄修改表結構記錄,不包括插入等
- admin: django提供的后臺管理
- apps: 配置當前app
- models: ORM,寫指定的類,通過命令可以創建數據結構
- tests: 單元測試
- views: 業務代碼
創建完project,做下面兩個配置
1、配置模板的路徑
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, 'templates')], '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', ],},},]2、配置靜態目錄,在setting文件最下面
STATICFILES_DIRS = ( os.path.join(BASE_DIR, 'static'), )<!-- 引用靜態文件--> <img class="logo left" src='/static/in.png' alt="Logo">3、數據庫
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME':'dbname','USER': 'root','PASSWORD': 'xxx','HOST': '','PORT': '',} }# 由于Django內部連接MySQL時使用的是MySQLdb模塊,而python3中還無此模塊,所以需要使用pymysql來代替# 如下設置放置的與project同名的配置的 __init__.py文件中 import pymysql pymysql.install_as_MySQLdb()Django的MTV模式
- Model:數據庫,負責業務對象與數據庫的對象(ORM)
- Template: 模板文件,負責如何把頁面展示給用戶
- View: 業務處理,負責業務邏輯,并在適當的時候調用Model和Template
- urls分發器:將一個個URL的頁面請求分發給不同的view處理,view再調用相應的Model和Template
?
實例:login
1 from django.shortcuts import render 2 from django.shortcuts import HttpResponse 3 from django.shortcuts import render 4 from django.shortcuts import redirect 5 # Create your views here. 6 7 user_list = [ 8 {'username':'a','email':'aaaaaa','gender':'M'}, 9 {'username':'b','email':'bbbbbb','gender':'M'}, 10 {'username':'c','email':'cccccc','gender':'F'} 11 ] 12 13 14 def home(request): 15 if request.method == "POST": 16 u = request.POST.get('username') 17 e = request.POST.get('email') 18 g = request.POST.get('gender') 19 temp = {"username":u,"email":e,"gender":g} 20 user_list.append(temp) 21 return render(request,'home.html',{'user_list':user_list}) 22 23 def login(request): 24 # 'django.middleware.csrf.CsrfViewMiddleware' 在setting中需要注釋掉這一項,否則提交表單時會出錯 25 #第一種打開html文件方式 26 # f = open('templates/login.html','r',encoding='utf-8') 27 # data = f.read() 28 # f.close() 29 # return HttpResponse(data) 30 31 # 第2種打開html文件方式: 注意在setting需要配置template路徑DIRS, 32 # TEMPLATES = [ 33 # { 34 # 'BACKEND': 'django.template.backends.django.DjangoTemplates', 35 # 'DIRS': [os.path.join(BASE_DIR, 'templates')], 36 # }, 37 # ] 38 error_msg = '' 39 if request.method=="POST": 40 user = request.POST.get('user',None) 41 pwd = request.POST.get("password",None) 42 if user=='root' and pwd == '123': 43 # 跳轉到百度 44 # return redirect('www.baidu.com') 45 return redirect('/home') 46 else: 47 # 用戶密碼不匹配 48 error_msg = 'user or password error' 49 50 51 return render(request, 'login.html',{'error_msg':error_msg}) views 1 from django.contrib import admin 2 from django.urls import path 3 from django.shortcuts import HttpResponse 4 5 from cmdb import views 6 7 8 9 10 urlpatterns = [ 11 path('admin/', admin.site.urls), 12 path('login', views.login), 13 path('home', views.home), 14 ] url <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><link rel="stylesheet" href="/static/comments.css"/><title>Title</title><style>label{width:80px;text-align:right;display:inline-block;}</style> </head> <body><form action="/login" method="post"><p><label for="username">用戶名:</label><input id="username" type="text" name="user" /></p><p><label for="password">密 碼:</label><input id="password" type="text" name="password" /><input type="submit" value="提交"/><span style="color: red;">{{error_msg}}</span></p></form><script src="/static/jquery-1.12.4.js"></script> </body> </html> login.html <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Title</title> </head> <body> <div><form action="/home" method="post"><input type="text" name="username" /><input type="text" name="email" /><input type="text" name="gender" /><input type="submit" value="添加" /></form> </div><div><table>{% for row in user_list %}<tr><td>{{row.username}}</td><td>{{row.gender}}</td><td>{{row.email}}</td></tr>{% endfor %}</table></div></body> </html> home.html?
注:
- 'django.middleware.csrf.CsrfViewMiddleware' 在setting中需要注釋掉這一項,否則提交表單時會出錯
- redirect('http://www.baidu.com')? ? ? ? ? ? ?重定向,只能填url;如果填本地url,則為/login,加斜杠
- render(request, 'login.html',{'error_msg':error_msg})? ? 返回HTML文件
- <span style="color: red;">{{error_msg}}</span>? ? ? ? ? ?error_msg相當于一個變量
- <form action="/login" method="post"> 和 path('login',views.login): login后面要一樣,要不都為login/,要不都為login
?
路由系統
https://docs.djangoproject.com/en/1.11/topics/http/urls/
https://docs.djangoproject.com/en/2.0/topics/http/urls/
URL配置(URLconf)就像Django 所支撐網站的目錄,是URL與視圖函數之間的映射表。
- 語法
path和url參數說明
# 正則表達式:一個正則表達式字符串 # views視圖函數:一個可調用對象,通常為一個視圖函數或一個指定視圖函數路徑的字符串 # 參數:可選的要傳遞給視圖函數的默認參數(字典形式) # 別名:一個可選的name參數- ?單一路由對應
- ?基于正則的路由
?注:
# urlpatterns中的元素按照書寫順序從上往下逐一匹配正則表達式,一旦匹配成功則不再繼續。 # 不需要添加一個前導的反斜杠,因為每個URL 都有。例如,應該是^articles 而不是 ^/articles。?注:
#Django settings.py配置文件中默認沒有 APPEND_SLASH 這個參數,但 Django 默認這個參數為 APPEND_SLASH = True。 其作用就是自動在網址結尾加'/'。 from django.conf.urls import url from app01 import viewsurlpatterns = [url(r'^blog/$', views.blog), ] # 訪問 http://www.example.com/blog 時,默認將網址自動轉換為 http://www.example/com/blog/ 。 # 如果在settings.py中設置了 APPEND_SLASH=False,此時我們再請求 http://www.example.com/blog 時就會提示找不到頁面。- ?分組命名匹配
?補充:
# 正則表達式分組匹配(通過圓括號)來捕獲URL中的值并以位置參數形式傳遞給視圖。 url(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive),?注:
- 在views 函數中,應當注意形參
- URLconf 在請求的URL 上查找,將它當做一個普通的Python 字符串。不包括GET和POST參數以及域名。
- ?捕獲的參數是字符串
- ?視圖函數中指定默認值
- ?添加額外的參數
- ?為路由映射設置名稱
?
?設置名稱后,通過如下方式調用:
# 模板中使用生成URL {% url 'index' 2012 %} # 函數中使用生成URL reverse('index', args=(2012,)) 路徑:django.urls.reverse # Model中使用獲取URL 自定義get_absolute_url() 方法class NewType(models.Model):caption = models.CharField(max_length=16)def get_absolute_url(self):"""為每個對象生成一個URL應用:在對象列表中生成查看詳細的URL,使用此方法即可!!!:return:"""# return '/%s/%s' % (self._meta.db_table, self.id)# 或from django.urls import reversereturn reverse('NewType.Detail', kwargs={'nid': self.id}) # 使用獲取URL 自定義get_absolute_url() 方法?獲取請求匹配成功的URL信息:request.resolver_match
- 根據app對路由規則進行分類
- 命名空間
?即使不同的APP使用相同的URL名稱,URL的命名空間模式也可以讓你唯一反轉命名的URL。
# project中的urls.py from django.conf.urls import url, includeurlpatterns = [url(r'^app01/', include('app01.urls', namespace='app01')),url(r'^app02/', include('app02.urls', namespace='app02')), ]# app01中的urls.py from django.conf.urls import url from app01 import viewsapp_name = 'app01' urlpatterns = [url(r'^(?P<pk>\d+)/$', views.detail, name='detail') ]# app02中的urls.py from django.conf.urls import url from app02 import viewsapp_name = 'app02' urlpatterns = [url(r'^(?P<pk>\d+)/$', views.detail, name='detail') ]以上定義帶命名空間的url之后,使用name生成URL時候,應該如下:
# 模板中使用: {% url 'app01:detail' pk=12 pp=99 %}# views中的函數中使用 v = reverse('app01:detail', kwargs={'pk':11})?
?
?
?
?
?
二、視圖
request.GET
request.POST
request.FILES
return HttpResponse("字符串")
return render(request, "HTML模板的路徑")
return redirect('/只能填URL')
?
獲取input? radio 等單選的內容:request.POST.get()
獲取checkbox等多選的內容: request.POST.getlist()
上傳文件,form標簽做特殊設置:加上屬性enctype="multipart/form-data"
obj = request.FILES.get()obj.namef = open(obj.name, 'wb')for item in obj.chunks():f.write(item)f.close?
?FBV &CBV:? function base view & class base view
FBV:
url.py:? ? index? => 函數名
view.py:? def? 函數(request)?
CBV:
url.py:? index => 類
匹配到url后,先調用dispatch方法,再判斷get or post繼續執行
views:
from django.views import Viewclass Home(View):def dispatch(self, request, *args, **kwargs):result = super(Home,self).dispatch(request, *args, **kwargs)return resultdef get(self,request):return render(request,'home.html')def post(self,request):return render(request, 'home.html')?url:
from cmdb import viewsurlpatterns = [path('home', views.Home.as_view()), ]?
?
?
模板
https://docs.djangoproject.com/en/1.11/ref/templates/builtins/#std:templatetag-for
- ?兩個符號
- ?變量
?注:
1、如果計算結果的值是可調用的,它將被無參數的調用。 調用的結果將成為模版的值。 2、如果使用的變量不存在, 模版系統將插入 string_if_invalid 選項的值, 它被默認設置為'' (空字符串) 。?使用方式:
def template_test(request):l = [11, 22, 33]d = {"name": "alex"}class Person(object):def __init__(self, name, age):self.name = nameself.age = agedef dream(self):return "{} is dream...".format(self.name)Alex = Person(name="Alex", age=34)Egon = Person(name="Egon", age=9000)Eva_J = Person(name="Eva_J", age=18)person_list = [Alex, Egon, Eva_J]return render(request, "template_test.html", {"l": l, "d": d, "person_list": person_list}) view 1 <body> 2 <!--{# 取l中的第一個參數 #}--> 3 {{ l.0 }} 4 <br /> 5 {# 取字典中key的值 #} 6 {{ d.name }} 7 <br /> 8 {# 取對象的name屬性 #} 9 {{ person_list.0.name }} 10 <br /> 11 {# .操作只能調用不帶參數的方法 #} 12 {{ person_list.0.dream }} 13 </body> template.html- ??Filters:過濾器
在Django的模板語言中,通過使用?過濾器?來改變變量的顯示。?
-
- 語法:使用管道符"|"來應用過濾器。
?實例:
{{ name|lower }} // 會將name變量應用lower過濾器之后再顯示它的值。lower在這里的作用是將文本全都變成小寫。?注:
1、過濾器支持“鏈式”操作。即一個過濾器的輸出作為另一個過濾器的輸入。 2、過濾器可以接受參數,例如:{{ sss|truncatewords:30 }},這將顯示sss的前30個詞。 3、過濾器參數包含空格的話,必須用引號包裹起來。比如使用逗號和空格去連接一個列表中的元素,如:{{ list|join:', ' }} 4、'|'左右沒有空格沒有空格沒有空格- ?Django內置過濾器
default
# 如果一個變量是false或者為空,使用給定的默認值。 否則,使用變量的值。 {{ value|default:"nothing"}} # 返回value的長度,如 value=['a', 'b', 'c', 'd']的話,就顯示4.length
# 返回值的長度,作用于字符串和列表。 {{ value|length }} # 返回value的長度,如 value=['a', 'b', 'c', 'd']的話,就顯示4.?filesizeformat
# 將值格式化為一個 “人類可讀的” 文件尺寸 (例如 '13 KB', '4.1 MB', '102 bytes', 等等)。 {{ value|filesizeformat }} # 如果 value 是 123456789,輸出將會是 117.7 MB。slice
# 切片 {{value|slice:"2:-1"}}?date
# 格式化時間 {{ value|date:"Y-m-d H:i:s"}}truncatechars
# 如果字符串字符多于指定的字符數量,那么會被截斷。截斷的字符串將以可翻譯的省略號序列(“...”)結尾。 # 參數:截斷的字符數 {{ value|truncatechars:9}}?truncatewords
# 在一定數量的字后截斷字符串。 {{ value|truncatewords:9}}?cut
# 移除value中所有的與給出的變量相同的字符串 {{ value|cut:' ' }} # 如果value為'i love you',那么將輸出'iloveyou'.?join
# 使用字符串連接列表,例如Python的str.join(list)- 自定義filter
自定義過濾器只是帶有一個或兩個參數的Python函數:
# 變量(輸入)的值 - -不一定是一個字符串 # 參數的值 - 這可以有一個默認值,或完全省略 # 例如,在過濾器{{var | foo:'bar'}}中,過濾器foo將傳遞變量var和參數“bar”。?在哪定義filter代碼:
app01/__init__.pymodels.pytemplatetags/ # 在app01下面新建一個package package__init__.pyapp01_filters.py # 建一個存放自定義filter的文件views.py?如何編寫自定義filter
from django import template register = template.Library()@register.filter(name="say_hello") def say_hello(value):return "hello {}".format(value)
?如何使用自定義filter
{# 先導入我們自定義filter那個文件 #} {% load app01_filters %}{# 使用我們自定義的filter #} {{ d.name|say_hello }}- for循環
for ... empty
<ul> {% for user in user_list %}<li>{{ user.name }}</li> {% empty %}<li>空空如也</li> {% endfor %} </ul>- ?if ... else/ if ... elif ... else
?注: if語句支持 and 、or、==、>、<、!=、<=、>=、in、not in、is、is not判斷。
- with
定義一個中間變量,多用于給一個復雜的變量起別名。
{% with total=business.employees.count %}{{ total }} employee{{ total|pluralize }} {% endwith %}{% with business.employees.count as total %}{{ total }} employee{{ total|pluralize }} {% endwith %}注:? 等號左右不要加空格。
- 注釋
- 模板語言注意事項
?
?
?
for語句在模板里的應用
for循環與table結合使用:在html中獲取字典或列表里面的值,可以通過row.key或row.1等方式獲得
<table>
{% for row in user_list %}
<tr>
<td>{{row.username}}</td>
<td>{{row.gender}}</td>
<td>{{row.email}}</td>
</tr>
{% endfor %}
</table>
?
user_list = [
{'username':'a','email':'aaaaaa','gender':'M'},
{'username':'b','email':'bbbbbb','gender':'M'},
{'username':'c','email':'cccccc','gender':'F'}
]
return render(request,'home.html',{'user_list':user_list})
?
?
USER_DICT = {
'1': {'name': 'root1', 'email': 'root@live.com'},
'2': {'name': 'root2', 'email': 'root@live.com'},
'3': {'name': 'root3', 'email': 'root@live.com'},
'4': {'name': 'root4', 'email': 'root@live.com'},
'5': {'name': 'root5', 'email': 'root@live.com'},
}
# 模板語言
{{user_dict.k1}}
{%for k,v in user_dict.items%}
<li><{{k}}-{{v}}/li>
{%endfor%}
{%for k in user_dict.keys%}
<li><{{k}}/li>
{%endfor%}
{%for v in user_dict.values%}
<li><{{v}}/li>
{%endfor%}
模板語言循環字典
?
ORM操作
對象關系映射(Object Relational Mapping,簡稱ORM)模式通過使用描述對象和數據庫之間映射的元數據,將程序中的對象自動持久化到關系數據庫中。
ORM在業務邏輯層和數據庫層之間充當了橋梁的作用。
- Django中ORM的配置
https://docs.djangoproject.com/en/2.0/topics/db/queries/
setting.py文件配置:
DATABASES = {"default": {"ENGINE": "django.db.backends.mysql","NAME": "你的數據庫名稱", # 需要自己手動創建數據庫"USER": "數據庫用戶名","PASSWORD": "數據庫密碼","HOST": "數據庫IP","POST": 3306} }Django項目的__init__.py文件配置:
# 由于Django內部連接MySQL時使用的是MySQLdb模塊,而python3中還無此模塊,所以需要使用pymysql來代替# 如下設置放置的與project同名的配置的 __init__.py文件中import pymysqlpymysql.install_as_MySQLdb()- ?字段
?其他字段:
AutoField(Field)- int自增列,必須填入參數 primary_key=TrueBigAutoField(AutoField)- bigint自增列,必須填入參數 primary_key=True注:當model中如果沒有自增列,則自動會創建一個列名為id的列from django.db import modelsclass UserInfo(models.Model):# 自動創建一個列名為id的且為自增的整數列username = models.CharField(max_length=32)class Group(models.Model):# 自定義自增列nid = models.AutoField(primary_key=True)name = models.CharField(max_length=32)SmallIntegerField(IntegerField):- 小整數 -32768 ~ 32767PositiveSmallIntegerField(PositiveIntegerRelDbTypeMixin, IntegerField)- 正小整數 0 ~ 32767IntegerField(Field)- 整數列(有符號的) -2147483648 ~ 2147483647PositiveIntegerField(PositiveIntegerRelDbTypeMixin, IntegerField)- 正整數 0 ~ 2147483647BigIntegerField(IntegerField):- 長整型(有符號的) -9223372036854775808 ~ 9223372036854775807自定義無符號整數字段class UnsignedIntegerField(models.IntegerField):def db_type(self, connection):return 'integer UNSIGNED'PS: 返回值為字段在數據庫中的屬性,Django字段默認的值為:'AutoField': 'integer AUTO_INCREMENT','BigAutoField': 'bigint AUTO_INCREMENT','BinaryField': 'longblob','BooleanField': 'bool','CharField': 'varchar(%(max_length)s)','CommaSeparatedIntegerField': 'varchar(%(max_length)s)','DateField': 'date','DateTimeField': 'datetime','DecimalField': 'numeric(%(max_digits)s, %(decimal_places)s)','DurationField': 'bigint','FileField': 'varchar(%(max_length)s)','FilePathField': 'varchar(%(max_length)s)','FloatField': 'double precision','IntegerField': 'integer','BigIntegerField': 'bigint','IPAddressField': 'char(15)','GenericIPAddressField': 'char(39)','NullBooleanField': 'bool','OneToOneField': 'integer','PositiveIntegerField': 'integer UNSIGNED','PositiveSmallIntegerField': 'smallint UNSIGNED','SlugField': 'varchar(%(max_length)s)','SmallIntegerField': 'smallint','TextField': 'longtext','TimeField': 'time','UUIDField': 'char(32)',BooleanField(Field)- 布爾值類型NullBooleanField(Field):- 可以為空的布爾值CharField(Field)- 字符類型- 必須提供max_length參數, max_length表示字符長度TextField(Field)- 文本類型EmailField(CharField):- 字符串類型,Django Admin以及ModelForm中提供驗證機制IPAddressField(Field)- 字符串類型,Django Admin以及ModelForm中提供驗證 IPV4 機制GenericIPAddressField(Field)- 字符串類型,Django Admin以及ModelForm中提供驗證 Ipv4和Ipv6- 參數:protocol,用于指定Ipv4或Ipv6, 'both',"ipv4","ipv6"unpack_ipv4, 如果指定為True,則輸入::ffff:192.0.2.1時候,可解析為192.0.2.1,開啟刺功能,需要protocol="both"URLField(CharField)- 字符串類型,Django Admin以及ModelForm中提供驗證 URLSlugField(CharField)- 字符串類型,Django Admin以及ModelForm中提供驗證支持 字母、數字、下劃線、連接符(減號)CommaSeparatedIntegerField(CharField)- 字符串類型,格式必須為逗號分割的數字UUIDField(Field)- 字符串類型,Django Admin以及ModelForm中提供對UUID格式的驗證FilePathField(Field)- 字符串,Django Admin以及ModelForm中提供讀取文件夾下文件的功能- 參數:path, 文件夾路徑match=None, 正則匹配recursive=False, 遞歸下面的文件夾allow_files=True, 允許文件allow_folders=False, 允許文件夾FileField(Field)- 字符串,路徑保存在數據庫,文件上傳到指定目錄- 參數:upload_to = "" 上傳文件的保存路徑storage = None 存儲組件,默認django.core.files.storage.FileSystemStorageImageField(FileField)- 字符串,路徑保存在數據庫,文件上傳到指定目錄- 參數:upload_to = "" 上傳文件的保存路徑storage = None 存儲組件,默認django.core.files.storage.FileSystemStoragewidth_field=None, 上傳圖片的高度保存的數據庫字段名(字符串)height_field=None 上傳圖片的寬度保存的數據庫字段名(字符串)DateTimeField(DateField)- 日期+時間格式 YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]DateField(DateTimeCheckMixin, Field)- 日期格式 YYYY-MM-DDTimeField(DateTimeCheckMixin, Field)- 時間格式 HH:MM[:ss[.uuuuuu]]DurationField(Field)- 長整數,時間間隔,數據庫中按照bigint存儲,ORM中獲取的值為datetime.timedelta類型FloatField(Field)- 浮點型DecimalField(Field)- 10進制小數- 參數:max_digits,小數總長度decimal_places,小數位長度BinaryField(Field)- 二進制類型 字段- 參數
其他參數:
null 數據庫中字段是否可以為空db_column 數據庫中字段的列名db_tablespacedefault 數據庫中字段的默認值primary_key 數據庫中字段是否為主鍵db_index 數據庫中字段是否可以建立索引unique 數據庫中字段是否可以建立唯一索引unique_for_date 數據庫中字段【日期】部分是否可以建立唯一索引unique_for_month 數據庫中字段【月】部分是否可以建立唯一索引unique_for_year 數據庫中字段【年】部分是否可以建立唯一索引verbose_name Admin中顯示的字段名稱blank Admin中是否允許用戶輸入為空editable Admin中是否可以編輯help_text Admin中該字段的提示信息choices Admin中顯示選擇框的內容,用不變動的數據放在內存中從而避免跨表操作如:gf = models.IntegerField(choices=[(0, '何穗'),(1, '大表姐'),],default=1)error_messages 自定義錯誤信息(字典類型),從而定制想要顯示的錯誤信息;字典健:null, blank, invalid, invalid_choice, unique, and unique_for_date如:{'null': "不能為空.", 'invalid': '格式錯誤'}validators 自定義錯誤驗證(列表類型),從而定制想要的驗證規則from django.core.validators import RegexValidatorfrom django.core.validators import EmailValidator,URLValidator,DecimalValidator,\MaxLengthValidator,MinLengthValidator,MaxValueValidator,MinValueValidator如:test = models.CharField(max_length=32,error_messages={'c1': '優先錯信息1','c2': '優先錯信息2','c3': '優先錯信息3',},validators=[RegexValidator(regex='root_\d+', message='錯誤了', code='c1'),RegexValidator(regex='root_112233\d+', message='又錯誤了', code='c2'),EmailValidator(message='又錯誤了', code='c3'), ]) 參數- ?元信息
- ?拓展
- ?ORM與數據庫字段對應
- 時間字段
- 連表結構
- 表的基本操作
操作表常用屬性
<1> all(): 查詢所有結果<2> filter(**kwargs): 它包含了與所給篩選條件相匹配的對象<3> get(**kwargs): 返回與所給篩選條件相匹配的對象,返回結果有且只有一個,如果符合篩選條件的對象超過一個或者沒有都會拋出錯誤。<4> exclude(**kwargs): 它包含了與所給篩選條件不匹配的對象<5> values(*field): 返回一個ValueQuerySet——一個特殊的QuerySet,運行后得到的并不是一系列model的實例化對象,而是一個可迭代的字典序列<6> values_list(*field): 它與values()非常相似,它返回的是一個元組序列,values返回的是一個字典序列<7> order_by(*field): 對查詢結果排序<8> reverse(): 對查詢結果反向排序,請注意reverse()通常只能在具有已定義順序的QuerySet上調用(在model類的Meta中指定ordering或調用order_by()方法)。<9> distinct(): 從返回結果中剔除重復紀錄(如果你查詢跨越多個表,可能在計算QuerySet時得到重復的結果。此時可以使用distinct(),注意只有在PostgreSQL中支持按字段去重。)<10> count(): 返回數據庫中匹配查詢(QuerySet)的對象數量。<11> first(): 返回第一條記錄<12> last(): 返回最后一條記錄<13> exists(): 如果QuerySet包含數據,就返回True,否則返回False 操作表常用屬性?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
參考:
https://www.cnblogs.com/liwenzhou/p/9959979.html
轉載于:https://www.cnblogs.com/gareth-yu/p/9688991.html
總結
- 上一篇: vmware三种网络模式配置(转载)
- 下一篇: 高精度倾斜摄影建模解决方案