Django的一些操做與視圖函數

一 . Django的安裝

pip install django==1.14.6

#  後面的數字是django的版本

 

二 .  經過命令行(cmd)來建立Django項目

複製代碼
1. 切換到保存項目的文件夾下  # cd 空格 文件夾名

2. django-admin startproject 項目名稱   # 建立一個新項目

3. python manage.py runserver  127.0.0.1:8000  # 啓動django項目, 後面的ip地址和端口

4. django-admin startapp app名字  # 建立App, 能夠建立多個
複製代碼

  添加完App後,須要在settings文件裏面的INSTALLED_APPS後面加上一句話.html

  

 

  若是有多個App 爲了不URL都寫在一塊兒看着太亂,須要把各個須要的urls.py文件寫到本身的App文件下.python

    此時在主urls.py文件裏面寫內容就要有一些變化了.django

複製代碼
from django.conf.urls import url,include
from django.contrib import admin
from App01 import views
urlpatterns = [
    url(r'^admin/', admin.site.urls,),
    url(r'^login/', views.login, name='login'),
    url(r'^App01/', include('App01.urls')),  # 凡是以App01開頭的請求,都去App01.urls裏面找.
] 
# 可是此時的搜索路徑須要以App01開頭了, 好比原來搜索127.0.0.1:8000/login就能找到login頁面,
   可是若是這個login的url在App01的文件裏 就須要寫成 127.0.0.1:8000/App01/login 這樣才能找到login頁面
複製代碼

  URL的別名應用瀏覽器

  

# 上述操做是在HTML文件中進行的,a標籤也是這樣作的, 可是在視圖(views)裏面的渲染就不同啦.

 

 

  

  

  namespace的用法

  

  crm裏面url的寫法session

  

  app01裏面url的寫法app

  

  crm視圖函數函數

  

 

三 . 經過pycharm來建立django項目

打開pycharm-->File-->NewProject-->Django

 四 . 傳參方式

# login後面用括號括起來的是是參數,並且必須用括號括起來, 
    在視圖裏面的函數必須用一個形參來接收

 

  

五 . CBV與FBV

  FBV(function base views)   在視圖裏面寫函數就是FBV(經常使用的)post

  CBV(class base views)    在視圖裏面寫類, 同時urls.py裏面也和FBV不同(基本用不到)url

    CBV 的本質也是FBV  先實例化,而後賦值self.request,而後執行裏面的dispatch方法,dispatch方法經過反射能夠拿到get或者post而後去執行函數spa

# path拿到的是不帶參數的路徑, get_full_path拿到的是帶參數的路徑
request.path  拿到的路徑是/index/    
request.get_full_path()  拿到的路徑是  /index/?page=1

 

複製代碼
# 寫在視圖裏面的 
class Myd(View):

    def get(self,request,*args, **kwargs):
        print('get方法執行了')
return render(request,'cvpost.html',{'name':self.name})

    def post(self,request,n):
        print('post方法被執行了')
        return HttpResponse('post')
複製代碼

 

複製代碼
# urls.py
from django.conf.urls import url
from myapp.views import MyView #引入咱們在views.py裏面建立的類
  
urlpatterns = [
     url(r'^index/$', MyView.as_view()),   # as_view()這個方法拿到的是view函數而後去u執行
]
複製代碼

 

# 傳參
url(r'^cv/(\d{2})/', views.Myd.as_view(),name='cv'),

  CBV加裝飾器

    咱們在給類方法加裝飾器的時候,他不一樣於函數直接寫在上面就能夠,咱們要先將其轉化爲方法裝飾器.

    Django中提供了method_decorator裝飾器用於函數裝飾器轉化爲方法裝飾器

複製代碼
from django.views import View
from django.utils.decorators import method_decorator

class AddClass(View):

    @method_decorator(wrapper)   #這個wrapper就是定義的裝飾器
    def get(self, request):
        return render(request, "add_class.html")

    def post(self, request):
        class_name = request.POST.get("class_name")
        models.Classes.objects.create(name=class_name)
        return redirect("/class_list/")
複製代碼

  給CBV加裝飾器的方法有三種

複製代碼
# 第一種方法
class AddClass(View):

    @method_decorator(wrapper)   
    def get(self, request):
        return render(request, "add_class.html")

# 直接寫在方法上面
複製代碼

 

複製代碼
# 第二種方法,寫在類上面,可是須要指定給誰加 name=誰
@method_decorator(wrapper, name='get')  
class AddClass(View):

    def get(self, request):
        return render(request, "add_class.html")
複製代碼

 

複製代碼
# 第三種方法, dispatch方法
from django.utils.decorators import method_decorator

@method_decorator(wrapper)
def dispatch(self, request, *args, **kwargs):
return super().dispatch(request, *args, **kwargs)

# 本身定義一個dispatch方法,這個方法是不管get仍是post方法都被加上裝飾器
複製代碼

 

六 . 瀏覽器的八種請求方式

http_method_names = ['get', 'post', 'put', 'patch', 'delete', 'head', 'options', 'trace']

 

七 . request後面的屬性與方法

request.POST/GET/method/COOKIES/session/FILES/path/get_full_path/META/body
相關文章
相關標籤/搜索