pip install django==1.14.6 # 後面的數字是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)裏面的渲染就不同啦.
crm裏面url的寫法session
app01裏面url的寫法app
crm視圖函數函數
打開pycharm-->File-->NewProject-->Django
# login後面用括號括起來的是是參數,並且必須用括號括起來, 在視圖裏面的函數必須用一個形參來接收
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'),
咱們在給類方法加裝飾器的時候,他不一樣於函數直接寫在上面就能夠,咱們要先將其轉化爲方法裝飾器.
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/")
# 第一種方法 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.POST/GET/method/COOKIES/session/FILES/path/get_full_path/META/body