Django - - - -è§å¾å±ä¹è§å¾å½æ°(views)
é 读ç®å½(Content)
è§å¾å±ä¹è§å¾å½æ°(views)
ä¸ä¸ªè§å¾å½æ°ï¼ç®ç§°è§å¾ï¼æ¯ä¸ä¸ªç®åçPython 彿°ï¼å®æ¥åWeb请æ±å¹¶ä¸è¿åWebååºãååºå¯ä»¥æ¯ä¸å¼ ç½é¡µçHTMLå 容ï¼ä¸ä¸ªéå®åï¼ä¸ä¸ª404é误ï¼ä¸ä¸ªXMLææ¡£ï¼æè ä¸å¼ å¾ç. . . æ¯ä»»ä½ä¸è¥¿é½å¯ä»¥ãæ 论è§å¾æ¬èº«å å«ä»ä¹é»è¾ï¼é½è¦è¿åååºã代ç åå¨åªé乿 æè°ï¼åªè¦å®å¨ä½ çPythonç®å½ä¸é¢ã餿¤ä¹å¤æ²¡ææ´å¤çè¦æ±äºââå¯ä»¥è¯´â没æä»ä¹ç¥å¥çå°æ¹âã为äºå°ä»£ç æ¾å¨æå¤ï¼çº¦å®æ¯å°è§å¾æ¾ç½®å¨é¡¹ç®æåºç¨ç¨åºç®å½ä¸çå为views.pyçæä»¶ä¸ã
è§å¾å½æ°ï¼
ä¸å®å
å«ä¸¤ä¸ªå¯¹è±¡ï¼
requset---->ç¨æ·è¯·æ±ç¸å
³çææä¿¡æ¯ï¼å¯¹è±¡ï¼
Httpresponse---->ååºå符串
ä¸ä¸ªç®åçè§å¾
ä¸é¢æ¯ä¸ä¸ªè¿åå½åæ¥æåæ¶é´ä½ä¸ºHTMLææ¡£çè§å¾ï¼
from django.http import HttpResponse import datetime def current_datetime(request): now = datetime.datetime.now() html = "<html><body>It is now %s.</body></html>" % now return HttpResponse(html)
让æä»¬éè¡é 读ä¸é¢ç代ç ï¼
-
é¦å ï¼æä»¬ä» django.http模åå¯¼å ¥äºHttpResponseç±»ï¼ä»¥åPythonçdatetimeåºã
-
æ¥çï¼æä»¬å®ä¹äºcurrent_datetime彿°ãå®å°±æ¯è§å¾å½æ°ãæ¯ä¸ªè§å¾å½æ°é½ä½¿ç¨HttpRequest对象ä½ä¸ºç¬¬ä¸ä¸ªåæ°ï¼å¹¶ä¸é常称ä¹ä¸ºrequestã
注æ,è§å¾å½æ°çåç§°å¹¶ä¸éè¦ï¼ä¸éè¦ç¨ä¸ä¸ªç»ä¸çå½åæ¹å¼æ¥å½åï¼ä»¥ä¾¿è®©Djangoè¯å«å®ãæä»¬å°å ¶å½å为current_datetimeï¼æ¯å 为è¿ä¸ªåç§°è½å¤ç²¾ç¡®å°åæ åºå®çåè½ã
-
è¿ä¸ªè§å¾ä¼è¿åä¸ä¸ªHttpResponse对象ï¼å ¶ä¸å å«çæçååºãæ¯ä¸ªè§å¾å½æ°é½è´è´£è¿åä¸ä¸ªHttpResponse对象ã
è§å¾å½æ°ï¼å´ç»ç两个对象è¿è¡ï¼HttpResponseåHttpRequest
1.HttpRequest
ããrequest---->请æ±ä¿¡æ¯
屿§ï¼
request.path ãããã# è·åè®¿é®æä»¶è·¯å¾ request.method屿§ ãã#è·å请æ±ä¸ä½¿ç¨çHTTPæ¹å¼ï¼POST/GETï¼ request.bodyãããããã#嫿æè¯·æ±ä½ä¿¡æ¯ æ¯bytesç±»å request.GET ãããããã#GET请æ±çæ°æ®(ç±»åå ¸å¯¹è±¡) 请æ±å¤´ä¸çurlä¸?å颿¿å¼
request.POSTãããã # POST请æ±çæ°æ®(ç±»åå ¸å¯¹è±¡) 请æ±ä½éæ¿å¼ request.COOKIES ãããã#å 嫿æcookiesçæ åPythonåå ¸å¯¹è±¡ï¼keysåvalues齿¯å符串ã
request.FILESï¼ å 嫿æä¸ä¼ æä»¶çç±»åå ¸å¯¹è±¡ï¼FILESä¸çæ¯ä¸ä¸ªKey齿¯<input type="file" name="" />æ ç¾ä¸ ããããname屿§çå¼ï¼FILESä¸çæ¯ä¸ä¸ªvalue忶乿¯ä¸ä¸ªæ åçpythonåå ¸å¯¹è±¡ï¼å å«ä¸é¢ä¸ä¸ªKeysï¼ ãããã filenameï¼ ä¸ä¼ æä»¶åï¼ç¨å符串表示 ãããã content_type: ä¸ä¼ æä»¶çContent Type ãããã contentï¼ ä¸ä¼ æä»¶çåå§å 容 request.userï¼ æ¯ä¸ä¸ªdjango.contrib.auth.models.User对象ï¼ä»£è¡¨å½åç»éçç¨æ·ãå¦æè®¿é®ç¨æ·å½å ããããæ²¡æç»éï¼userå°è¢«åå§å为django.contrib.auth.models.AnonymousUserçå®ä¾ãä½ ããããå¯ä»¥éè¿userçis_authenticated()æ¹æ³æ¥è¾¨å«ç¨æ·æ¯å¦ç»éï¼ ããããif req.user.is_authenticated();åªæ**Djangoä¸çAuthenticationMiddleware ããããæ¶è¯¥å±æ§æå¯ç¨ request.sessionï¼ ãã å¯ä¸å¯è¯»åç屿§ï¼ä»£è¡¨å½åä¼è¯çåå ¸å¯¹è±¡ï¼èªå·±æ**Djangoä¸çsessionæ¯ææ¶è¯¥å±æ§æå¯ç¨ request.GET.get('name') ãã æ¿å°GET请æ±énameçå¼ å¦ææä¸ªé®å¯¹åºæå¤ä¸ªå¼ï¼åä¸è½ç´æ¥ç¨getåå¼ï¼éè¦ç¨getlistï¼å¦ï¼ request.POST.getlist("hobby")
请æ±url:http://127.0.0.1:8000/index.html/23?a=1 request.path : 请æ±è·¯å¾ request.pathç»æä¸º:/index.html/23 request.get_full_path() request.get_full_path()ç»æä¸º:/index.html/23?a=1
æ¹æ³ï¼
1 |
|
注æï¼é®å¼å¯¹ç弿¯å¤ä¸ªçæ¶å,æ¯å¦checkboxç±»åçinputæ ç¾ï¼selectæ ç¾ï¼éè¦ç¨ï¼
1 |
|
2.HttpResponse
ããHttpResponse---->ç¸åºå符串
ãã对äºHttpRequest请æ±å¯¹è±¡æ¥è¯´ï¼æ¯ç±djangoèªå¨å建çï¼ä½æ¯ï¼HttpResponseååºå¯¹è±¡å°±å¿ é¡»æä»¬èªå·±åå»ºãæ¯ä¸ªview请æ±å¤çæ¹æ³å¿ é¡»è¿åä¸ä¸ªHttpResponseååºå¯¹è±¡ãHttpResponseç±»å¨django.http.HttpResponseã
å¨HttpResponseå¯¹è±¡ä¸æ©å±çå¸¸ç¨æ¹æ³
1.render 彿°
ããå°æå®é¡µé¢æ¸²æåè¿åç»æµè§å¨
render(request, template_name[, context]ï¼
ç»åä¸ä¸ªç»å®ç模æ¿åä¸ä¸ªç»å®çä¸ä¸æåå ¸ï¼å¹¶è¿åä¸ä¸ªæ¸²æåç HttpResponse 对象ã
åæ°ï¼ requestï¼ ç¨äºçæååºç请æ±å¯¹è±¡ã template_nameï¼è¦ä½¿ç¨ç模æ¿ç宿´åç§°ï¼å¯éçåæ° contextï¼æ·»å å°æ¨¡æ¿ä¸ä¸æçä¸ä¸ªåå ¸ãé»è®¤æ¯ä¸ä¸ªç©ºåå ¸ã妿åå ¸ä¸çæä¸ªå¼æ¯å¯è°ç¨çï¼è§å¾å°å¨æ¸²ææ¨¡æ¿ä¹åè°ç¨å®ã content_typeï¼çæçææ¡£è¦ä½¿ç¨çMIMEç±»åãé»è®¤ä¸ºDEFAULT_CONTENT_TYPE 设置çå¼ã statusï¼ååºçç¶æç ãé»è®¤ä¸º200ã
from django.shortcuts import render def test(request): return render(request,'index.html') #åç¨æ·æ¾ç¤ºä¸ä¸ªhtml页é¢
ä¸é¢ä¸ºrender宿¹æºç ï¼å¯ä»¥çåºrenderæå乿¯è¿åäºä¸ä¸ªHttpResponseç»webserver
def render(request, template_name, context=None, content_type=None, status=None, using=None): """ Returns a HttpResponse whose content is filled with the result of calling django.template.loader.render_to_string() with the passed arguments. """ content = loader.render_to_string(template_name, context, request, using=using) return HttpResponse(content, content_type, status)
ç»è¯´render:
ããrenderæ¹æ³ä¸»è¦æ¯å°ä»æå¡å¨æåçæ°æ®ï¼å¡«å å°æ¨¡æ¿ä¸ï¼ç¶åå°æ¸²æåçhtmléææä»¶è¿åç»æµè§å¨ãè¿éä¸å®è¦æ³¨æï¼render渲æçæ¯æ¨¡æ¿ï¼ä¸é¢æä»¬ççä»ä¹å«ä½æ¨¡æ¿ï¼
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="x-ua-compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Title</title> <style> li,ul,ol{ list-style: none; } a{ text-decoration: none; } </style> </head> <body> <ul> {% for book in list %} <li><a href="{{book.id}}">{{ book.btitle }}</a></li> {% endfor %} </ul> </body> </html>
ä¸é¢{%%}ä¹é´å æ¬çå°±æ¯æä»¬è¦ä»æ°æ®åºååºçæ°æ®ï¼è¿è¡å¡«å ã对äºè¿æ ·ä¸ä¸ªæ²¡æå¡«å æ°æ®çhtmlæä»¶ï¼æµè§å¨æ¯ä¸è½è¿è¡æ¸²æçï¼æä»¥ï¼å¯¹äºä¸è¿°{%%}ä¹é´çå 容å è¦è¢«renderè¿è¡æ¸²æä¹åï¼æè½åéç»æµè§å¨ã
ããä¸é¢ä¸¾ä¸ªä¾åï¼
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="x-ua-compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Title</title> <style> li,ul,ol{ list-style: none; } a{ text-decoration: none; } </style> </head> <body> <ul> {% for book in list %} <li><a href="{{book.id}}">{{ book.btitle }}</a></li> {% endfor %} </ul> </body> </html>
show.html
def show(request, id): book = BookInfo.objects.get(pk=id) ãã#仿°æ®åºä¸ååºå¯¹åºidçæ°æ® herolist = book.heroinfo_set.all() context = {'list': herolist} ãããã # å°æ°æ®ä¿åå¨list return render(request, 'booktest/show.html', context) #éè¿renderè¿è¡æ¨¡æ¿æ¸²æ
2.redirect 彿°
åæ°å¯ä»¥æ¯ï¼
- ä¸ä¸ªæ¨¡åï¼å°è°ç¨æ¨¡åçget_absolute_url() 彿°
- ä¸ä¸ªè§å¾ï¼å¯ä»¥å¸¦æåæ°ï¼å°ä½¿ç¨urlresolvers.reverse æ¥ååè§£æåç§°
- ä¸ä¸ªç»å¯¹çæç¸å¯¹çURLï¼å°åå°ä¸å¨çä½ä¸ºéå®åçä½ç½®ã
é»è®¤è¿åä¸ä¸ªä¸´æ¶çéå®åï¼ä¼ épermanent=True å¯ä»¥è¿åä¸ä¸ªæ°¸ä¹ çéå®åã
示ä¾:
ä½ å¯ä»¥ç¨å¤ç§æ¹å¼ä½¿ç¨redirect() 彿°ã
ä¼ éä¸ä¸ªå¯¹è±¡
å°è°ç¨get_absolute_url() æ¹æ³æ¥è·åéå®åçURLï¼
1 2 3 4 5 6 |
|
ä¼ éä¸ä¸ªè§å¾çåç§°
å¯ä»¥å¸¦æä½ç½®åæ°åå ³é®ååæ°ï¼å°ä½¿ç¨reverse() æ¹æ³ååè§£æURLï¼ã
1 2 3 |
|
ä¼ éè¦éå®åçä¸ä¸ªç¡¬ç¼ç çURL
1 2 3 |
|
ä¹å¯ä»¥æ¯ä¸ä¸ªå®æ´çURLï¼
1 2 3 |
|
é»è®¤æ åµä¸ï¼redirect() è¿åä¸ä¸ªä¸´æ¶éå®åã以䏿æçå½¢å¼é½æ¥æ¶ä¸ä¸ªpermanent åæ°ï¼å¦æè®¾ç½®ä¸ºTrueï¼å°è¿åä¸ä¸ªæ°¸ä¹ çéå®åï¼
1 2 3 4 |
|
跳转ï¼éå®åï¼åºç¨
-----------------------------------url.py url(r"login", views.login), url(r"yuan_back", views.yuan_back), -----------------------------------views.py def login(req): if req.method=="POST": if 1: # return redirect("/yuan_back/") name="yuanhao" return render(req,"my backend.html",locals()) return render(req,"login.html",locals()) def yuan_back(req): name="èæ" return render(req,"my backend.html",locals()) -----------------------------------login.html <form action="/login/" method="post"> <p>å§å<input type="text" name="username"></p> <p>æ§å«<input type="text" name="sex"></p> <p>é®ç®±<input type="text" name="email"></p> <p><input type="submit" value="submit"></p> </form> -----------------------------------my backend.html <h1>ç¨æ·{{ name }}ä½ å¥½</h1>
View Code
ä¸é¢æä»¬æ¥çä¸ä¸ªç°è±¡ï¼
--------------------urls.py------------------------------ urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^login/', views.login), url(r'^index/', views.index,), # url(r'^register/', views.register,name='reg'), ] ------------------view.py------------------------------- def login(request): if request.method=='POST': username=request.POST.get('user') password=request.POST.get('pwd') if username=='yuan' and password=='123': # return render(request,'index.html') return redirect('/index/') else: return render(request,'login.html',{'info':'è´¦å·æå¯ç é误'}) else: return render(request,'login.html') def index(request): name='yuan' return render(request,'index.html',{'a':name}) ---------------login.html-------------------------------- <h1>ç»éçé¢</h1> <form action="/login/" method="post"> <p>å§å <input type="text" name="user"></p> <p>å¯ç <input type="password" name="pwd"></p> <p><input type="submit"></p> <p>{{ info }}</p> </form> ---------------login.html-------------------------------- <h1>个人主页</h1> <h2>hello,{{ a}}</h2>
代ç
é¦å ï¼å¯å¨æå¡å¨åï¼æä»¬è¿å ¥login页é¢
æ£ç¡®è¾å ¥å§åï¼å¯ç åï¼æ¤æ¶æ§è¡redirect彿°ï¼ç»æå¦ä¸
ç°å¨æä»¬å°redirectæ¢ærenderï¼åéæ°èµ°ä¸éççï¼å¨login页é¢ï¼æ£ç¡®è¾å ¥å§åï¼å¯ç åï¼ç»æå¦ä¸ï¼
ç»å¿ç人ä¼åç°ï¼ç¨render彿°æ§è¡åçï¼å°åæ çå°å没æååï¼è¿æ¯loginï¼ä¸é¡µé¢ä¸ç{{a}}æ¤æ¶ä¹æ²¡æè¢«æ¸²æï¼æä»¥hello,å颿²¡æå 容æ¾ç¤ºï¼
对æ¯renderä¸redirectï¼
åå æ¯
renderï¼ åªæ¯è¿å页é¢å
容ï¼ä½æ¯æªåéç¬¬äºæ¬¡è¯·æ±
redirectï¼åéäºç¬¬äºæ¬¡è¯·æ±ï¼urlæ´æ°
æ»ç»ä¸¤è åºå«ï¼ãããã
ããããã第ä¸ï¼renderè¿åä¸ä¸ªç»éæååç页é¢ï¼å·æ°è¯¥é¡µé¢å°åå¤å°è·³è½¬å页é¢ãèredirectåä¸ä¼
ãããã 第äºï¼å¦æé¡µé¢éè¦æ¨¡æ¿è¯è¨æ¸²æ,éè¦çå°æ°æ®åºçæ°æ®å è½½å°html,é£ä¹renderæ¹æ³åä¸ä¼æ¾ç¤ºè¿ä¸é¨åï¼renderè¿åä¸ä¸ªç»éæå页é¢ï¼ä¸ä¼ç»è¿urlè·¯ç±ååç³»ç»ï¼ä¹å°±æ¯è¯´ï¼ä¸ä¼æ§è¡è·³è½¬åurlçè§å¾å½æ°ãè¿æ ·ï¼è¿åç页颿¸²æä¸æåï¼èredirectæ¯è·³è½¬å°æå®é¡µé¢ï¼å½ç»éæååï¼ä¼å¨urlè·¯ç±ç³»ç»è¿è¡å¹é ï¼å¦ææåå¨çæ å°å½æ°ï¼å°±ä¼æ§è¡å¯¹åºçæ å°å½æ°ã