一、Python Django 之 Views 数据交互
http请求中产生两个人核心对象:
http请求:HttpRequest对象
http响应:HttpReponse对象
所在位置django.http
之前我们用到的参数request就是HttpRequest 检测方法
二、HttpRequest对象
1、
2、
3、
三、HttpReponse对象
1、HttpReponse返回数据
return HttpResponse("<h1>ok</h1>")
2、render渲染
return render(req,"index.html",{"user_list":user_list})
注意:render渲染比HttpResponse复杂,完成同样的工作render只需要一步,HttpResponse却需要
Trmplate与Context等步骤。
3、render_to_response渲染
1)views
n="hope"
return render_to_response("index.html",{"name":n})
2)templates
<html>
<head>
</head>
<body>
<h1>{{ name }}</h1>
</body>
</html>
1)好处
使用render_to_response比render简便,省去了req参数
n="hope"
return render_to_response("index.html",{"name":n})
2)坏处
建议使用return,不用render_to_response
4、redirect重定向
return redirect(“www.baidu.com”)
注意:
--1 url: 原本urlpatterns按照模板使用的{},但是在return redirect("/home/")时,总是报错 'set' object is not reversible,
后来,将{}的集合写法换成[]列表写法则不再报错,return redirect("/home/")生效。
1)url
urlpatterns = [
path('admin/', admin.site.urls),
path('cur_time/', views.cur_time),
path('hello/',views.hello),
path('login/', views.login),
path('home/', views.home)]
# urlpatterns = {
# path('admin/', admin.site.urls),
# path('cur_time/', views.cur_time),
# # path('userInfo/',views.userInfo),
# # path('login/', views.login),
# # path('home/', views.home),
# path('hello/',views.hello),
# }
2)views
from django.shortcuts import render,HttpResponse,render_to_response,redirect
import datetime
from blog import models
def login(req):
if req.method == "POST":
if 1:
return redirect("/home/")
return render(req,"login.html")
def home(req):
name="xihaohu"
return render(req,"home.html",{"name":name})
3)templates
--1 login
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登录页面</title>
</head>
<body>
<form action="/login/" method="post">
<input type="text" name="username">
<input type="text" name="pwd">
<input type="submit" name="submit">
</form>
</body>
</html>
--2 home
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>首页</title>
</head>
<body>
<h1>welcom {{ name }}</h1>
</body>
</html>