本節(jié)內(nèi)容概要:
公司主營業(yè)務(wù):成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)建站是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)建站推出靖江免費(fèi)做網(wǎng)站回饋大家。
一、路由系統(tǒng)URL
二、視圖
三、模板
四、ORM操作
問題1:Django請求生命周期
-> URL對應(yīng)關(guān)系(匹配) -> 視圖函數(shù) -> 返回用戶字符串
-> URL對應(yīng)關(guān)系(匹配) -> 視圖函數(shù) -> 打開一個(gè)HTML文件,讀取內(nèi)容
問題2:創(chuàng)建Django project
django-admin startproject xxx
cd xxx
python manage.py startapp CMDB
創(chuàng)建項(xiàng)目的所有步驟
1. 創(chuàng)建Django工程 django-admin startproject 工程名 2. 創(chuàng)建APP cd 工程名 python manage.py startapp cmdb 3、靜態(tài)文件 project.settings.py STATICFILES_DIRS = ( os.path.join(BASE_DIR, "static"), ) 4、模板路徑 DIRS ==> [os.path.join(BASE_DIR,'templates'),] 5、settings中 middlerware # 注釋 csrf 6、定義路由規(guī)則 url.py "login" --> 函數(shù)名 7、定義視圖函數(shù)
app下views.py def func(request): # request.method GET / POST # http://127.0.0.1:8009/home?nid=123&name=alex # request.GET.get('',None) # 獲取請求發(fā)來的而數(shù)據(jù) # request.POST.get('',None) # return HttpResponse("字符串") # return render(request, "HTML模板的路徑") # return redirect('/只能填URL')
8、模板渲染
特殊的模板語言 -- {{ 變量名 }} def func(request): return render(request, "index.html", {'current_user': "alex"}) index.html <html> .. <body> <div>`current_user`</div> </body> </html> ====> 最后生成的字符串 <html> .. <body> <div>alex</div> </body> </html> -- For循環(huán) def func(request): return render(request, "index.html", {'current_user': "alex", 'user_list': ['alex','eric']}) index.html <html> .. <body> <div>`current_user`</div> <ul> {% for row in user_list %} {% if row == "alex" %} <li>{{ row }}</li> {% endif %} {% endfor %} </ul> </body> </html> #####索引################# def func(request): return render(request, "index.html", { 'current_user': "alex", 'user_list': ['alex','eric'], 'user_dict': {'k1': 'v1', 'k2': 'v2'}}) index.html <html> .. <body> <div>`current_user`</div> <a> {{ user_list.1 }} </a> <a> {{ user_dict.k1 }} </a> <a> {{ user_dict.k2 }} </a> </body> </html> ###### 條件 def func(request): return render(request, "index.html", { 'current_user': "alex", "age": 18, 'user_list': ['alex','eric'], 'user_dict': {'k1': 'v1', 'k2': 'v2'}}) index.html <html> .. <body> <div>`current_user`</div> <a> {{ user_list.1 }} </a> <a> {{ user_dict.k1 }} </a> <a> {{ user_dict.k2 }} </a> {% if age %} <a>有年齡</a> {% if age > 16 %} <a>老男人</a> {% else %} <a>小鮮肉</a> {% endif %} {% else %} <a>無年齡</a> {% endif %} </body> </html>
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
一、路由系統(tǒng)URL
1.三種方式
1、url(r'^index/', views.index), url(r'^home/', views.Home.as_view()), 2、url(r'^detail-(\d+).html', views.detail), 3、url(r'^detail-(?P<nid>\d+)-(?P<uid>\d+).html', views.detail)
ps:
def detail(request, *args,**kwargs):
pass
實(shí)戰(zhàn):
1.url(r'^detail-(\d+)-(\d+).html', views.detail),
def func(request, nid, uid): pass def func(request, *args): args = (2,9) def func(request, *args, **kwargs): args = (2,9)
2.url(r'^detail-(?P<nid>\d+)-(?P<uid>\d+).html', views.detail)
def func(request, nid, uid): pass def funct(request, **kwargs): kwargs = {'nid': 1, 'uid': 3} def func(request, *args, **kwargs): args = (2,9)
name
對URL路由關(guān)系進(jìn)行命名, ***** 以后可以根據(jù)此名稱生成自己想要的URL *****
url(r'^asdfasdfasdf/', views.index, name='i1'), url(r'^yug/(\d+)/(\d+)/', views.index, name='i2'), url(r'^buy/(?P<pid>\d+)/(?P<nid>\d+)/', views.index, name='i3'), def func(request, *args, **kwargs): from django.urls import reverse url1 = reverse('i1') # asdfasdfasdf/ url2 = reverse('i2', args=(1,2,)) # yug/1/2/ url3 = reverse('i3', kwargs={'pid': 1, "nid": 9}) # buy/1/9/ xxx.html {% url "i1" %} # asdfasdfasdf/ {% url "i2" 1 2 %} # yug/1/2/ {% url "i3" pid=1 nid=9 %} # buy/1/9/
注:
# 當(dāng)前的URL
request.path_info
多級路由
project/urls.py from django.conf.urls import url,include from django.contrib import admin urlpatterns = [ url(r'^cmdb/', include("app01.urls")), url(r'^monitor/', include("app02.urls")), ] app01/urls.py from django.conf.urls import url,include from django.contrib import admin from app01 import views urlpatterns = [ url(r'^login/', views.login), ] app02/urls.py from django.conf.urls import url,include from django.contrib import admin from app02 import views urlpatterns = [ url(r'^login/', views.login), ]
默認(rèn)值
命名空間
a. project.urls.py
from django.conf.urls import url,include urlpatterns = [ url(r'^a/', include('app01.urls', namespace='author-polls')), url(r'^b/', include('app01.urls', namespace='publisher-polls')), ]
b. app01.urls.py
from django.conf.urls import url from app01 import views app_name = 'app01'urlpatterns = [ url(r'^(?P<pk>\d+)/$', views.detail, name='detail') ]
c. app01.views.py
def detail(request, pk): print(request.resolver_match) return HttpResponse(pk)
以上定義帶命名空間的url之后,使用name生成URL時(shí)候,應(yīng)該如下:
v = reverse('app01:detail', kwargs={'pk':11})
{% url 'app01:detail' pk=12 pp=99 %}
django中的路由系統(tǒng)和其他語言的框架有所不同,在django中每一個(gè)請求的url都要有一條路由映射,這樣才能將請求交給對一個(gè)的view中的函數(shù)去處理。其他大部分的Web框架則是對一類的url請求做一條路由映射,從而是路由系統(tǒng)變得簡潔。
通過反射機(jī)制,為django開發(fā)一套動(dòng)態(tài)的路由系統(tǒng)Demo: 點(diǎn)擊下載
二、視圖
1、獲取用戶請求數(shù)據(jù)
request.GET request.POST request.FILES
PS:
GET:獲取數(shù)據(jù)
POST:提交數(shù)據(jù)
2、checkbox等多選的內(nèi)容
request.POST.getlist()
3、上傳文件
# 上傳文件,form標(biāo)簽做特殊設(shè)置
obj = request.FILES.get('fafafa') obj.name f = open(obj.name, mode='wb')for item in obj.chunks(): f.write(item) f.close()
4、FBV & CBV
function base view
url.py
index -> 函數(shù)名
view.py
def 函數(shù)(request):
...
====》
/index/ -> 函數(shù)名
/index/ -> 類
====》
建議:兩者都用
5、裝飾器
欠
三、ORM
1.MySQL和ORM對應(yīng)示例
select * from tb where id > 1 # 對應(yīng)關(guān)系models.tb.objects.filter(id__gt=1) models.tb.objects.filter(id=1) models.tb.objects.filter(id__lt=1)
1.根據(jù)類自動(dòng)創(chuàng)建數(shù)據(jù)庫表
創(chuàng)建類
a. 先寫類
找到models.py:
from django.db import models
class UserInfo(models.Model): # id列,自增,主鍵 # 用戶名列,字符串類型,指定長度 username = models.CharField(max_length=32) password = models.CharField(max_length=64)
找到如下添加最后一行:
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'app01', ]
執(zhí)行命令
python manage.py makemigrations python manage.py migrate
現(xiàn)在已經(jīng)創(chuàng)建了一個(gè)表:app01_userinfo
提示:如果你不是用的默認(rèn)數(shù)據(jù)庫那么你需要找到setting.py的DATABASE更改其內(nèi)容
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME':'dbname', 'USER': 'root', 'PASSWORD': 'xxx', 'HOST': '', 'PORT': '', } }
# 由于Django內(nèi)部連接MySQL時(shí)使用的是MySQLdb模塊,而python3中還無此模塊,所以需要使用pymysql來代替
Django默認(rèn)使用MySQLdb模塊鏈接MySQL
主動(dòng)修改為pymysql,在project同名文件夾下的__init__文件中添加如下代碼即可:
網(wǎng)頁名稱:Day_19-Django(二)
標(biāo)題鏈接:http://jinyejixie.com/article6/jjegig.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航、響應(yīng)式網(wǎng)站、App設(shè)計(jì)、靜態(tài)網(wǎng)站、網(wǎng)站改版、手機(jī)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)