DJANGO 28

url函數:url('^index/$',views.index,{'msg':'默認參數'},name='路由別名")html

有名無名分組:/page/10/1前端

路由層:'^page/(\d+)/(\d+)/$' 視圖層def page (request,n1,n2)  n1=10,n2=1python

路由層:'^page/(?P<num>\d+)/(?P<id>\d+)/$'django

視圖層:def page(request,id,num)  num =10,id=1app

注:有名無名不能混用函數

路由分發:post

有多個app 1.建立app:startapp app_name 優化

2.配置,在settings中配置app信息 在應用子級目錄下建立urls.py網站

主路由:url('^app01/',include('app01.urls',namespace='app01'))ui

子路由:url('^login/$',views.login,name='login')

訪問:/app01:login/

4.反向解析:{% url 'app01:login' [參數們] %}

reverse('app01:login'[,args=() |kwargs={}])

5.2.x新特性:url,include,re_path,path

re_path同url

path採用的是絕對字符串匹配path('index/',views.index,name='indedx'')

path:str|int|slug|uuid|path 語法:

path('page/<int:id>/',...)

自定義轉換器:1.按格式自定義轉化器類

2.註冊自定義轉化器類並起轉化器名

3.在路由中用轉化器名進行匹配

6.多app共存問題

路由問題:import app01.views as app01_view |路由分發

模板問題:在templates文件夾下創建與應用名相同的文件夾,將該應用的模板文件放置本身應用名文件夾下,render(request,'app01/login.html')

在各自app應用下創建與應用同名文件夾

放置本身的模板頁面

虛擬環境

解決版本共存

1.用pycharm選擇virtualenv建立一個純淨環境

2.將環境copy到須要指定長期使用的文件夾下

3.再次建立項目時,將該環境添加到pycharm環境選擇中

4.爲該環境添加須要處理的版本共存包

路由設置主頁與404

路由層:

from django.urls import path,re_path

urlpatterns = [ re_path('^$',root,name='root')

# 其餘路由...

# 404配在最下方
re_path('/$', error)]

## 5、2.x路由分發

```python
'''
1.無名稱空間
主路由:
path('app01/', include('app01.urls'))
子路由:
path('test/', views.test)

2.有名稱空間
主路由:
path('app01/', include(('app01.urls', 'app01'))),
子路由:
path('test/', views.test, name='test')
模板層:
{% url 'app01:test' %}

## 6、僞靜態

```python
'''
動態頁面:數據內容會發生變化的頁面
靜態頁面:數據內容不會發生變化的頁面
針對SEO(搜索引擎優化),靜態頁面更容易被搜索引擎網站收錄
僞靜態就是講動態頁面假裝成靜態頁面,
容易被搜索引擎網站收錄,從而增長搜索機率,提升流量
'''

'''
路由層:
url('^index/$', views.index),
url('^article/(?P<id>(\d+)).html/$',
views.article, name='article')

視圖函數層:
def index(request):
return render(request, 'index.html')
def article(request, id):
return render(request, 'article.html', {'id': id})

模板層:
index.html
<a href="{% url 'article' 1 %}">第一篇文章</a>
<a href="{% url 'article' 2 %}">第二篇文章</a>
<a href="{% url 'article' 3 %}">第三篇文章</a>

article.html
<h1>第{{ id }}篇文章</h1>
'''
```

## 7、request對象

```python
'''
1. method: 請求方式
2. GET: get請求的參數
3. POST: post請求的參數(本質是從bdoy中取出來)
4. body: post提交的數據(不能直接查看)
5. path: 請求的路徑,不帶參數
6. request.get_full_path(): 請求路徑,帶參數
7. FILES: 文件數據
8. encoding: 編碼格式
9. META: 數據大彙總的字典
'''
```

## 8、FBV與CBV

```python
'''
FBV:function base views 函數方式完成視圖響應
CBV:class base views 類方式完成視圖響應
'''
'''
視圖層:
from django.shortcuts import HttpResponse
from django.views import View
class CBVView(View):
def get(self, request):
return HttpResponse("響應get請求")
def post(self, request):
return HttpResponse("響應post請求")
路由層:
url('^path/$', views.CBVView.as_views())
'''
```

## 9、文件上傳

```python
'''
前端:upload.html頁面
1.往自身路徑發送post請求,要將第四個中間件註釋
2.multipart/form-data格式容許發送文件
3.multiple屬性表示能夠多文件操做
<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="files" multiple="multiple">
<input type="submit" value="上傳">
</form>

後臺:re_path('^upload/$', upload)def upload(request): if request.method == "GET": return render(request, 'upload.html') if request.method == "POST": # 若是一個key對應提交了多條數據,get取最後一個數據 ,getlist取所有數據 last_file = request.FILES.get('files', None) files = request.FILES.getlist('files', None) # import django.core.files.uploadedfile.TemporaryUploadedFile # file是TemporaryUploadedFile類型, 本質是對系統file類封裝, 就是存放提交的文件數據的文件流對象 for file in files: with open(file.name, 'wb') as f: for line in file: # 從file中去數據寫到指定文件夾下的指定文件中 f.write(line) return HttpResponse('上傳成功')'''

相關文章
相關標籤/搜索