from django.shortcuts import render,HttpResponse import datetime # Create your views here. def showtime(request): cur_time=datetime.datetime.now() return HttpResponse(str(cur_time))
"""djone URL Configuration The `urlpatterns` list routes URLs to views. For more information please see: https://docs.djangoproject.com/en/2.1/topics/http/urls/ Examples: Function views 1. Add an import: from my_app import views 2. Add a URL to urlpatterns: path('', views.home, name='home') Class-based views 1. Add an import: from other_app.views import Home 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') Including another URLconf 1. Import the include() function: from django.urls import include, path 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) """ from django.contrib import admin from django.urls import path from cklsite import views urlpatterns = [ path('admin/', admin.site.urls), path('timer/',views.showtime) ]
$ python manage.py runserver
啓動了8000端口html
輸入訪問路徑:python
http://www.javashuo.com/article/p-oxfvvfbb-cp.html正則表達式
from django.shortcuts import render,HttpResponse import datetime # Create your views here. def showtime(request): cur_time=datetime.datetime.now() return HttpResponse(str(cur_time)) def login(request): return render(request, "cklsite/login.html") # HttpResponse返回字符串,render返回html
html的路徑在templates裏,這個設定在settings.pydjango
新增目錄:session
from django.contrib import admin from django.urls import path from cklsite import views urlpatterns = [ path('admin/', admin.site.urls), path('timer/',views.showtime), path('login/',views.login) ]
get的提交請求,顯示在地址欄上了app
from django.shortcuts import render,HttpResponse import datetime # Create your views here. def showtime(request): cur_time=datetime.datetime.now() return HttpResponse(str(cur_time)) def login(request): return render(request, "cklsite/login.html") # HttpResponse返回字符串,render返回html def validate(request): return HttpResponse("驗證成功")
from django.contrib import admin from django.urls import path from cklsite import views urlpatterns = [ path('admin/', admin.site.urls), path('timer/',views.showtime), path('login/',views.login), path('validate/',views.validate) ]
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Login Home</title> </head> <body> <h3>登陸頁面</h3> <form action="http://127.0.0.1:8000/validate/"> <p>姓名<input type="text" name="user"></p> <p>密碼<input type="password" name="pwd"></p> <input type="submit"> </form> </body> </html>
當提交用戶名和密碼後:函數
def validate(request): print(request.GET) print(request.POST) return HttpResponse("驗證成功")
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Login Home</title> </head> <body> <h3>登陸頁面</h3> <form action="http://127.0.0.1:8000/validate/" method="post"> <p>姓名<input type="text" name="user"></p> <p>密碼<input type="password" name="pwd"></p> <input type="submit"> </form> </body> </html>
MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', # 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ]
再次提交:post
#是由於驗證方法裏面的GET方法,修改成POST的測試
def validate(request): # print(request.GET["user"]) # print(request.POST) username=request.POST.get("user") password=request.POST.get("pwd") if username == 'ckl' and password == '123': return HttpResponse("驗證成功") else: return HttpResponse("驗證失敗咧")
"""djone URL Configuration The `urlpatterns` list routes URLs to views. For more information please see: https://docs.djangoproject.com/en/2.1/topics/http/urls/ Examples: Function views 1. Add an import: from my_app import views 2. Add a URL to urlpatterns: path('', views.home, name='home') Class-based views 1. Add an import: from other_app.views import Home 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') Including another URLconf 1. Import the include() function: from django.urls import include, path 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) """ from django.contrib import admin from django.urls import path from cklsite import views from blog import views as bview urlpatterns = [ path('admin/', admin.site.urls), path('timer/',views.showtime), path('login/',views.login), path('validate/',views.validate), path('blog/article/2004/',bview.article_year) ]
from django.shortcuts import render,HttpResponse # Create your views here. def article_year(request): return HttpResponse("2004")
查看返回:url
#這樣的匹配寫死了,若是我要匹配2003呢?
導入url,對於路徑寫成正則表達式
from django.contrib import admin from django.urls import path from django.conf.urls import url from cklsite import views from blog import views as bview urlpatterns = [ path('admin/', admin.site.urls), path('timer/',views.showtime), path('login/',views.login), path('validate/',views.validate), url(r'^blog/article/\d+/',bview.article_year) ]
再次訪問:
思考:這時候就須要對年份的子串進行分組,以下:
from django.contrib import admin from django.urls import path from django.conf.urls import url from cklsite import views from blog import views as bview urlpatterns = [ path('admin/', admin.site.urls), path('timer/',views.showtime), path('login/',views.login), path('validate/',views.validate), url(r'^blog/article/(\d+)/',bview.article_year) ]
效果:
須要兩個參數,可是隻傳了一個,也就是:
url(r'^blog/article/(\d+)/',bview.article_year) #article_year(request,2045)
修改方法:
from django.shortcuts import render,HttpResponse # Create your views here. def article_year(request,year): return HttpResponse(str(year))
結果:
編輯URL:
from django.contrib import admin from django.urls import path from django.conf.urls import url from cklsite import views from blog import views as bview urlpatterns = [ path('admin/', admin.site.urls), path('timer/',views.showtime), path('login/',views.login), path('validate/',views.validate), url(r'^blog/article/(\d+)/$',bview.article_year), url(r'^blog/article/(\d+)/(\d+)/$',bview.article_year_month) #分組兩個,函數須要兩個實參 ]
編輯view
def article_year_month(request,year,month): return HttpResponse(year + month)
訪問:
#分組幾個,函數就須要幾個參數
URL匹配順序從上到下的,若是增長這樣的:
urlpatterns = [ path('admin/', admin.site.urls), path('timer/',views.showtime), path('login/',views.login), path('validate/',views.validate), url(r'^blog/article/(\d+)/$',bview.article_year), url(r'^blog/article/2008/$',bview.test), url(r'^blog/article/(\d+)/(\d+)/$',bview.article_year_month) ]
增長view
def test(request): return HttpResponse("test!")
訪問:
#沒法訪問到test,是由於test的路徑已經被以前的覆蓋了
有名分組解決
"""djone URL Configuration The `urlpatterns` list routes URLs to views. For more information please see: https://docs.djangoproject.com/en/2.1/topics/http/urls/ Examples: Function views 1. Add an import: from my_app import views 2. Add a URL to urlpatterns: path('', views.home, name='home') Class-based views 1. Add an import: from other_app.views import Home 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') Including another URLconf 1. Import the include() function: from django.urls import include, path 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) """ from django.contrib import admin from django.urls import path from django.conf.urls import url from cklsite import views from blog import views as bview urlpatterns = [ path('admin/', admin.site.urls), path('timer/',views.showtime), path('login/',views.login), path('validate/',views.validate), url(r'^blog/article/(\d+)/$',bview.article_year), url(r'^blog/article/2008/$',bview.test), #url(r'^blog/article/(\d+)/(\d+)/$',bview.article_year_month), url(r'^blog/article/(?P<year_id>\d+)/(?P<month_id>\d+)/$',bview.article_year_month) #article_year_month(year_id=xx,month_id=xx) ]
修改方法:
def article_year_month(request,year_id,month_id): return HttpResponse(year_id + month_id)
訪問:
當前全部的url都寫在總的url,若是有5個項目每一個項目有10個url,那麼就有50個url,解決辦法就是url分發
"""djone URL Configuration The `urlpatterns` list routes URLs to views. For more information please see: https://docs.djangoproject.com/en/2.1/topics/http/urls/ Examples: Function views 1. Add an import: from my_app import views 2. Add a URL to urlpatterns: path('', views.home, name='home') Class-based views 1. Add an import: from other_app.views import Home 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') Including another URLconf 1. Import the include() function: from django.urls import include, path 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) """ from django.contrib import admin from django.urls import path from django.conf.urls import url,include from cklsite import views from blog import views as bview urlpatterns = [ path('admin/', admin.site.urls), url(r'^blog/',include('blog.urls')) ]
from django.urls import path from django.conf.urls import url,include from blog import views as bview #import view 這樣寫錯誤,由於當前文件非執行文件,因此程序沒法找到view #真正的執行文件是manage.py,而其同級目錄沒有views,因此會報錯 urlpatterns = [ url(r'^article/(\d+)/$',bview.article_year), url(r'^article/2008/$',bview.test), url(r'^article/(?P<year_id>\d+)/(?P<month_id>\d+)/$',bview.article_year_month) #article_year_month(year_id=xx,month_id=xx) ]
路徑以下,當前的manage下沒有view
運行結果:
5.1.1.登陸url
"""djone URL Configuration The `urlpatterns` list routes URLs to views. For more information please see: https://docs.djangoproject.com/en/2.1/topics/http/urls/ Examples: Function views 1. Add an import: from my_app import views 2. Add a URL to urlpatterns: path('', views.home, name='home') Class-based views 1. Add an import: from other_app.views import Home 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') Including another URLconf 1. Import the include() function: from django.urls import include, path 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) """ from django.contrib import admin from django.urls import path from django.conf.urls import url,include from cklsite import views as ckl_views from blog import views as bview urlpatterns = [ path('admin/', admin.site.urls), path('login/',ckl_views.login), url(r'^blog/',include('blog.urls')) ]
5.1.2.登陸方法
from django.shortcuts import render,HttpResponse import datetime def login(request): if request.method == "POST": #只須要一個方法,對請求的方式進行判斷 user=request.POST.get("user") pwd=request.POST.get("pwd") return HttpResponse("login successfully!") return render(request,"cklsite/login.html")
5.1.3.登陸html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Login Home</title> </head> <body> <h3>登陸頁面</h3> <form action="/login/" method="post"> <p>姓名<input type="text" name="user"></p> <p>密碼<input type="password" name="pwd"></p> <input type="submit"> </form> </body> </html>
5.1.4.登陸請求
from django.contrib import admin from django.urls import path from django.conf.urls import url,include from cklsite import views as ckl_views from blog import views as bview urlpatterns = [ path('admin/', admin.site.urls), path('login.html/',ckl_views.login), ]
請求失敗:
#解決辦法:
修改login.html裏面的路徑:
<form action="/login/" method="post">
html若是有幾百個,那每一個都須要修改,這樣的話,效率過低,這時候就須要用到反射了
from django.contrib import admin from django.urls import path from django.conf.urls import url,include from cklsite import views as ckl_views from blog import views as bview urlpatterns = [ path('admin/', admin.site.urls), path('login.html/',ckl_views.login,name="LOGIN") ]
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Login Home</title> </head> <body> <h3>登陸頁面</h3> <form action="{% url 'LOGIN' %}" method="post"> <p>姓名<input type="text" name="user"></p> <p>密碼<input type="password" name="pwd"></p> <input type="submit"> </form> </body> </html>
這裏{% url 'LOGIN' %} 是模板語法,render解析url,將LOGIN解析爲url對應的login.html
訪問測試:
6.其它方法
經常使用的請求方法:
request(請求對象):
request.GET get請求數據
request.POST post請求數據
request.POST.getlist() 請求多條數據
request.method 請求方法
request.path 請求路徑
request.get_full_path() 請求全路徑
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Login Home</title> </head> <body> <h3>登陸頁面</h3> <form action="{% url 'LOGIN' %}" method="post"> <p>姓名<input type="text" name="user"></p> <p>密碼<input type="password" name="pwd"></p> <p> 愛好 <input type="checkbox" name="hobby" value="1">檯球 <input type="checkbox" name="hobby" value="2">高爾夫 <input type="checkbox" name="hobby" value="3">水球 </p> <input type="submit"> </form> </body> </html>
from django.shortcuts import render,HttpResponse import datetime def login(request): if request.method == "POST": #只須要一個方法,對請求的方式進行判斷 user=request.POST.get("user") pwd=request.POST.get("pwd") hobby=request.POST.get("hobby") print("hobby:",hobby) return HttpResponse("login successfully!") return render(request,"cklsite/login.html")
可是,只獲取到一個值:
這時候須要getlist方法:
def login(request): if request.method == "POST": #只須要一個方法,對請求的方式進行判斷 user=request.POST.get("user") pwd=request.POST.get("pwd") hobby=request.POST.getlist("hobby") print("hobby:",hobby) return HttpResponse("login successfully!") return render(request,"cklsite/login.html")
再次查看:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Login Home</title> </head> <body> <h3>登陸頁面</h3> <form action="{% url 'LOGIN' %}" method="post"> <p>姓名<input type="text" name="user"></p> <p>密碼<input type="password" name="pwd"></p> <p> 愛好 <input type="checkbox" name="hobby" value="1">檯球 <input type="checkbox" name="hobby" value="2">高爾夫 <input type="checkbox" name="hobby" value="3">水球 </p> <select name="pro" id="" multiple size="3"> <option value="11">陝西省</option> <option value="22">海南省</option> <option value="33">上海市</option> </select> <input type="submit"> </form> </body> </html>
def login(request): if request.method == "POST": #只須要一個方法,對請求的方式進行判斷 user=request.POST.get("user") pwd=request.POST.get("pwd") hobby=request.POST.getlist("hobby") print("hobby:",hobby) pro=request.POST.getlist("pro") print("pro:",pro) return HttpResponse("login successfully!") return render(request,"cklsite/login.html")
效果: