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")
效果: