Django routing system (URL relationship mapping), views, templates
I. Routing system (URL relationship mapping)
1, the single route corresponds to:
A URL corresponds to a view function (Class)
Urls.py:url (R ' ^test ', views.test), #url (R ' ^home ', views. Test.as_view ()), Views.py:def Test (Request): print (Request.method) return render (Request, "home.html") "" " Class Test (View): def get (self, request): print (Request.method) return render (Request, "home.html") def post (self, request): print (Request.method) return render (Request, "home.html") "" "
2, based on the regular route corresponding:
Multiple URLs corresponding to one view
urls.py# multiple URLs correspond to a view function, but when you pass parameters to the view function, the URL of the parameter (R ' ^detail-(\d+)-(\d+). html ', Views.detail), and the URL for the corresponding parameter, Recommend this kind of writing, after the regular match completes the grouping assignment, when passes the parameter to be possible the parameter position change also does not have the relation URL (r ' ^detail-(? p<nid>\d+)-(? p<uid>\d+). html ', Views.detail), views.py: #普通传参def detail (Request, NID, UID): print (NID, UID) return HttpResponse ("%s-%s"% (Nid, UID)) #args传参def detail (request, *args, **kwargs): print (Args[0], args[1]) return HttpResponse ("%s-%s"% (Args[0], args[1])) #kwargs传参def detail (request, *args, **kwargs): print (kwargs["Nid"), kwargs["UID"]) return HttpResponse ("%s-%s"% (kwargs["nid"], kwargs["UID"])
3. Name:
Name the URL routing relationship, and later you can generate the URL you want based on this name
Urls.py:url (R ' ^url_1/', Views.index, name= ' i1 '), url (r ' ^url_2/(\d+)/(\d+)/', Views.index, name= ' i2 '), url (r ' ^url_3/( ? p<pid>\d+)/(? p<nid>\d+)/', Views.index, name= ' i3 '), Views.py:from django.urls import reversedef func (Request, *args, **kwargs) : url1 = reverse (' i1 ') # url_1/ url2 = reverse (' I2 ', args= ()) # url_2/1/2/ url3 = reverse (' i3 ', kwargs={' pid ': 1, "Nid": 9}) # url_3/1/9/xxx.html: {% url "i1"%} # url_1/ {% url "i2" 1 2%} # url_2/1/2/ {% url "i3" pid=1 nid=9%} # Url_3/1/9/ps: # Displays the current URL
4. Multi-level routing:
Multi-level routing to avoid collisions with multiple apps when the route (URL) in Project urls.py is consistent with the path name
#project/urls.py: From django.conf.urls import URL, include from django.contrib import admin urlpatterns = [ URL (R ' ^app1/', include ("App1.urls")), URL (r ' ^app2/', include ("App2.urls")), ] #app01/urls.py: From django.conf.urls import URL from app1 import views urlpatterns = [ url (R ' ^test ', views.test), ]# app02/urls.py: From django.conf.urls import URL from app2 to import views urlpatterns = [ url (r ' ^test ', views.test), ]
5. Default value, Namespace
Pass
Second, the View
1, FBV&CBV
1.1. FBV (function Base view) writes logic based on functions in view
#urls. Py:url (R ' ^test ', views.test), # FBV function Base view#views.py:def Test (Request): if Request.method = = "GET": return render (Request, ' test.html ')
1.2, CBV (class Base Viev) in the View (view) based on the class writing logic
#urls. Py;url (R ' ^home ', views. Test.as_view ()), # CBV class Base View . As_view () test has no view so inherit the Django view#views.py in the views.py test class: From django.views import Viewclass Test (View): # Call the Dispatch method in the parent class and rewrite the def dispatch (self, request, *args, * * Kwargs): # through dispatch reflection can be found such as: Get, the starting point of the Post method print ("before") result = Super (Test, self). Dispatch ( Request, *args, **kwargs) return result def get (self, request): print (Request.method) return Render (Request, "home.html") def post (self, request): print (Request.method) return render (Request, " Home.html ")
2. Example of extracting HTML from form submission data:
<!DOCTYPE HTML><HTMLLang= "en"><Head> <MetaCharSet= "UTF-8"> <title>Title</title></Head><Body> <formAction= "/test"Method= "POST"enctype= "Multipart/form-data"><!--Enctypes Property does not, the default commit is a string, unable to implement file upload - <P> <inputtype= "text"name= "User"placeholder= "User name" /> </P> <P> <inputtype= "Password"name= "pwd"placeholder= "Password" /> </P> <P>Male:<inputtype= "Radio"name= "Gender"value= "1"/>female:<inputtype= "Radio"name= "Gender"value= "2"/>Publicity:<inputtype= "Radio"name= "Gender"value= "3"/> </P> <P>Male:<inputtype= "checkbox"name= "Favor"value= "One"/>female:<inputtype= "checkbox"name= "Favor"value= "All"/>Publicity:<inputtype= "checkbox"name= "Favor"value= " the"/> </P> <P> <Selectname= "City"multiple> <optionvalue= "sh">Shanghai</option> <optionvalue= "BJ">Beijing</option> <optionvalue= "TJ">Tianjin</option> </Select> </P> <P> <inputtype= "File"name= "File"/> </P> <inputtype= "Submit"value= "Submit"/> </form></Body></HTML>
test.html
def Test (Request): if Request.method = = "GET": Return render (Request, ' Te St.html ') elif Request.method = = "POST": # text V = Request. Post.get (' pwd ') # Gets the input input box with the value print (v) # Radio V0 = Request. Post.get (' Gender ') # gets radio's value print (v0) # checkbox v1 = Request. Post.getlist (' favor ') # Gets the checkbox multiple selection in the case of value print (v1) # Select v2 = Request. Post.getlist (' city ') # Gets the Select drop-down box multiple case of Value print (v2) # File obj = Request. Files.get (' file ') # Gets the upload file and saves print (obj, type (obj), obj.name) import os file_path = Os.path.join (' Upload ', obj.name) F = open (File_path, mode= "WB") for I in Obj.chunks (): # chunks () use the generator to load only partially uploaded files at a time until the load is complete Bi f.write (i) f.close () return redirect ("/test") Else: # put,delete,head,option ... Return Redirect ("/test")
Third, the template
A rough overview of the previous blog post
Pass
"Python"--Django Routing system (URL relationship mapping), views, templates