日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > HTML >内容正文

HTML

前端_Django

發布時間:2024/4/15 HTML 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 前端_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
mysite- mysite # 對整個程序進行配置- init- settings # 配置文件- url # URL對應關系- wsgi # 遵循WSIG規范,uwsgi + nginx- manage.py # 管理Django程序:- python manage.py - python manage.py startapp xx- python manage.py makemigrations- python manage.py migrate

其他常用命令

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 createsuperuser

pycharm 運行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與視圖函數之間的映射表。

  • 語法
# Django 1.1 from django.conf.urls import url urlpatterns = [url(正則表達式, views視圖函數,參數,別名), ]# Django 2.0 from django.urls import path urlpatterns = [path(正則表達式, views視圖函數,參數,別名),]

path和url參數說明

# 正則表達式:一個正則表達式字符串 # views視圖函數:一個可調用對象,通常為一個視圖函數或一個指定視圖函數路徑的字符串 # 參數:可選的要傳遞給視圖函數的默認參數(字典形式) # 別名:一個可選的name參數
  • ?單一路由對應
from django.urls import path from cmdb import viewsurlpatterns = [path('teststate',views.testState), ]
  • ?基于正則的路由
path('^index/(\d*)', views.index), path('^manage/(?P<name>\w*)/(?P<id>\d*)', views.manage),

?注:

# 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中的值并以關鍵字參數形式傳遞給視圖。 # 在Python的正則表達式中,分組命名正則表達式組的語法是(?P<name>pattern), # name是組的名稱 # pattern是要匹配的模式。 path('^manage/(?P<name>\w*)/(?P<id>\d*)', views.manage),

?補充:

# 正則表達式分組匹配(通過圓括號)來捕獲URL中的值并以位置參數形式傳遞給視圖。 url(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive),

?注:

  • 在views 函數中,應當注意形參
def testState(request, *args, **kwagrs):
  • URLconf 在請求的URL 上查找,將它當做一個普通的Python 字符串。不包括GET和POST參數以及域名。
# http://www.example.com/myapp/ 請求中,URLconf 將查找myapp/。 # 在http://www.example.com/myapp/?page=3 請求中,URLconf 仍將查找myapp/。# URLconf 不檢查請求的方法。換句話講,所有的請求方法 —— 同一個URL的POST、GET、HEAD等等 —— 都將路由到相同的函數
  • ?捕獲的參數是字符串
url(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive),# 傳遞到視圖函數views.year_archive() 中的year 參數永遠是一個字符串類型。
  • ?視圖函數中指定默認值
from django.conf.urls import urlfrom . import viewsurlpatterns = [url(r'^blog/$', views.page),url(r'^blog/page(?P<num>[0-9]+)/$', views.page), ]# views.py中,可以為num指定默認值 def page(request, num="1"):pass# 第一個模式并沒有從URL中捕獲任何東西。 # 如果第一個模式匹配上了,page()函數將使用其默認參數num=“1”,如果第二個模式匹配,page()將使用正則表達式捕獲到的num值。
  • ?添加額外的參數
path(r'^manage/(?P<name>\w*)', views.manage,{'id':333}), # Django 將調用views.manage(request, name=string, id=333')。
  • ?為路由映射設置名稱
pathl(r'^home', views.home, name='home'), # url匹配模式起名為 home pathl(r'^index/(\d*)', views.index, name='index'), # url匹配模式起名為index

?

?設置名稱后,通過如下方式調用:

# 模板中使用生成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對路由規則進行分類
url(r'^web/',include('web.urls')), # 可以包含其他的URLconfs文件
  • 命名空間

?即使不同的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、在Django的模板語言中按此語法使用:{{ 變量名 }}。 2、當模版引擎遇到一個變量,它將計算這個變量,然后用結果替換掉它本身。 3、變量的命名包括任何字母數字以及下劃線 ("_")的組合。 變量名稱中不能有空格或標點符號。 4、點(.)在模板語言中有特殊的含義。當模版系統遇到點("."),它將以這樣的順序查詢:字典查詢屬性或方法查詢數字索引查詢 -->

?注:

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的模板語言中,通過使用?過濾器?來改變變量的顯示。?

    • 語法:使用管道符"|"來應用過濾器。
{{ value|filter_name:參數 }}

?實例:

{{ 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循環
<ul> {% for user in user_list %}<li>{{ user.name }}</li> {% endfor %} </ul>

for ... empty

<ul> {% for user in user_list %}<li>{{ user.name }}</li> {% empty %}<li>空空如也</li> {% endfor %} </ul>
  • ?if ... else/ if ... elif ... else
{% if user_list %}用戶人數:{{ user_list|length }} {% elif black_list %}黑名單數:{{ black_list|length }} {% else %}沒有用戶 {% endif %}

?注: 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 %}

注:? 等號左右不要加空格。

  • 注釋
{# ... #}
  • 模板語言注意事項
1. Django的模板語言不支持連續判斷,即不支持以下寫法{% if a > b > c %}...{% endif } %2. Django的模板語言中屬性的優先級大于方法def xx(request):d = {"a": 1, "b": 2, "c": 3, "items": "100"}return render(request, "xx.html", {"data": d}) 如上,我們在使用render方法渲染一個頁面的時候,傳的字典d有一個key是items并且還有默認的 d.items() 方法,此時在模板語言中: {{ data.items }}{{ data.items }},默認會取d的items key的值。

?

?

?

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: int自增列,必須填入參數 primary_key=True。當model中如果沒有自增列,則自動會創建一個列名為id的列。 IntegerField: 一個整數類型,范圍在 -2147483648 to 2147483647。 CharField: 字符類型,必須提供max_length參數, max_length表示字符長度。 DateField: 日期字段,日期格式 YYYY-MM-DD,相當于Python中的datetime.date()實例。 DateTimeField: 日期時間字段,格式 YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ],相當于Python中的datetime.datetime()實例。 """

?其他字段:

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 用于表示某個字段可以為空。 unique 如果設置為unique=True 則該字段在此表中必須是唯一的 。 db_index 如果db_index=True 則代表著為此字段設置數據庫索引。 default 為該字段設置默認值。

其他參數:

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'), ]) 參數
  • ?元信息
class UserInfo(models.Model):nid = models.AutoField(primary_key=True)username = models.CharField(max_length=32)class Meta:# 數據庫中生成的表名稱 默認 app名稱 + 下劃線 + 類名db_table = "table_name"# 聯合索引index_together = [("pub_date", "deadline"),]# 聯合唯一索引unique_together = (("driver", "restaurant"),)# admin中顯示的表名稱 verbose_name# verbose_name加sverbose_name_plural 元信息
  • ?拓展
1.觸發Model中的驗證和錯誤提示有兩種方式:a. Django Admin中的錯誤信息會優先根據Admiin內部的ModelForm錯誤信息提示,如果都成功,才來檢查Model的字段并顯示指定錯誤信息b. 調用Model對象的 clean_fields 方法,如:# models.pyclass UserInfo(models.Model):nid = models.AutoField(primary_key=True)username = models.CharField(max_length=32)email = models.EmailField(error_messages={'invalid': '格式錯了.'})# views.pydef index(request):obj = models.UserInfo(username='11234', email='uu')try:print(obj.clean_fields())except Exception as e:print(e)return HttpResponse('ok')# Model的clean方法是一個鉤子,可用于定制操作,如:上述的異常處理。2.Admin中修改錯誤提示# admin.pyfrom django.contrib import adminfrom model_club import modelsfrom django import formsclass UserInfoForm(forms.ModelForm):username = forms.CharField(error_messages={'required': '用戶名不能為空.'})email = forms.EmailField(error_messages={'invalid': '郵箱格式錯誤.'})age = forms.IntegerField(initial=1, error_messages={'required': '請輸入數值.', 'invalid': '年齡必須為數值.'})class Meta:model = models.UserInfo# fields = ('username',)fields = "__all__"class UserInfoAdmin(admin.ModelAdmin):form = UserInfoFormadmin.site.register(models.UserInfo, UserInfoAdmin) 拓展
  • ?ORM與數據庫字段對應
對應關系:'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)', 字段對應
  • 時間字段
DatetimeField、DateField、TimeField 這個三個時間字段,都可以設置如下屬性。 auto_now_add 配置auto_now_add=True,創建數據記錄的時候會把當前時間添加到數據庫。 auto_now 配置上auto_now=True,每次更新數據記錄的時候會更新該字段。
  • 連表結構
一對多:models.ForeignKey(其他表) 多對多:models.ManyToManyField(其他表) 一對一:models.OneToOneField(其他表)
  • 表的基本操作
# # models.Tb1.objects.create(c1='xx', c2='oo') 增加一條數據,可以接受字典類型數據 **kwargs# obj = models.Tb1(c1='xx', c2='oo')# obj.save() # # models.Tb1.objects.get(id=123) # 獲取單條數據,不存在則報錯(不建議)# models.Tb1.objects.all() # 獲取全部# models.Tb1.objects.filter(name='seven') # 獲取指定條件的數據 # # models.Tb1.objects.filter(name='seven').delete() # 刪除指定條件的數據 ## models.Tb1.objects.filter(name='seven').update(gender='0') # 將指定條件的數據更新,均支持 **kwargs# obj = models.Tb1.objects.get(id=1)# obj.c1 = '111'# obj.save() # 修改單條數據

操作表常用屬性

<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

總結

以上是生活随笔為你收集整理的前端_Django的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。