目录
1、创建模板
views.py
def something(request):
#request是一个对象,封装了用户发送来的所有请求相关的数据
#1、获取请求方式
#2、在url上面传递值http://127.0.0.1:8000/something/?n1=123&n2=789
print(request.GET)
#3、在请求体中提交数据
return HttpResponse("返回内容")
urls.py
path('something/',views.something),
访问:
输出:
2、三种请求方式
#1、获取请求方式
print(request.method)
#2、在url上面传递值http://127.0.0.1:8000/something/?n1=123&n2=789
print(request.GET)
#3、在请求体中提交数据
print(request.POST)
3、三种响应方式
#4、【响应】HttpResponse("返回内容"),将字符串返回给请求者
#return HttpResponse(123)
#5、【响应】读取HTML的内容+渲染(替换)->字符串(网页源码),返回给用户浏览器
#return render(request,'something.html',{"title":"requst"})
#6、【响应】让浏览器重定向
return redirect("https://www.baidu.com/")
重定向处理:
4、案例:伪用户登录
(1)创建模板
views.py
import json
from django.shortcuts import render,HttpResponse,redirect
# Create your views here.
def index(request):
return HttpResponse("Hello Django!")
def user_list(requets):
return render(requets,'user_list.html')
def user_add(requets):
return render(requets,'user_add.html')
def tpl(requets):
name="代码骑士"
name_list=["小明","小红","李华","康康"]
role_dicts={"name":"小明","salary":100000,"position":"CEO"}
data_list=[
{"name": "小明", "salary": 100000, "position": "CEO"},
{"name": "小红", "salary": 100000, "position": "HR"},
{"name": "康康", "salary": 100000, "position": "CTO"}
]
return render(requets,'tpl.html',{"n1":name,"n2":name_list,"n3":role_dicts,"n4":data_list})
def news(requet):
#定义一个列表或字典存储数据
#向网址:http://www.chinaunicom.com.cn/api/article/NewsByIndex/2/2022/09/news发送请求
#使用第三方模块:requests
import requests
url = "http://www.chinaunicom.com.cn/api/article/NewsByIndex/2/2022/09/news"
headers = {'User-Agent': 'Mozilla/4.0'}
res = requests.get(url,headers=headers)
data_list=res.json()
print(data_list)
return render(requet,'news.html',{"news_list":data_list})
def something(request):
#request是一个对象,封装了用户发送来的所有请求相关的数据
#1、获取请求方式
print(request.method)
#2、在url上面传递值http://127.0.0.1:8000/something/?n1=123&n2=789
print(request.GET)
#3、在请求体中提交数据
print(request.POST)
#4、【响应】HttpResponse("返回内容"),将字符串返回给请求者
#return HttpResponse(123)
#5、【响应】读取HTML的内容+渲染(替换)->字符串(网页源码),返回给用户浏览器
#return render(request,'something.html',{"title":"requst"})
#6、【响应】让浏览器重定向
return redirect("https://www.baidu.com/")
def login(request):
if request.method == "GET":
return render(request,'login.html')
else:
#如果是POST请求,获取用户提交的数据
print(request.POST)
return HttpResponse("登录成功!")
urls.py
from django.urls import path
from app import views
urlpatterns = [
path('index/', views.index),
path('user/list/',views.user_list),
path('user/add/',views.user_add),
path('tpl/',views.tpl),
path('news/',views.news),
path('something/',views.something),
#用户登录
path('login/',views.login),
]
login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>用户登录</h1>
<form method="post" action="/login/">
<input type="text" name="user" placeholder="用户名">
<input type="password" name="pwd" placeholder="密码">
<input type="submit" value="提交"/>
</form>
</body>
</html>
访问:
貌似没什么问题,但是点击提交
这是因为,在提出post请求时,Django又一层加密保护机制,不能直接访问到post表单,需要在html中做特殊说明:
(2)csrf_token校验
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>用户登录</h1>
<form method="post" action="/login/">
{% csrf_token %}
<input type="text" name="user" placeholder="用户名">
<input type="password" name="pwd" placeholder="密码">
<input type="submit" value="提交"/>
</form>
</body>
</html>
再次提交就可以了
Django会自动生成隐藏码进行token加密,用于表单校验,增强保密性。
不加这句代码(注意,这句代码必须加在form表单中才行。):
{% csrf_token %}
Django就无法校验提交表单,就找不到跳转界面。
(3)POST表单数据获取与处理
def login(request):
if request.method == "GET":
return render(request,'login.html')
else:
#如果是POST请求,获取用户提交的数据
print(request.POST)
username=request.POST.get("user")
password = request.POST.get("pwd")
if username == 'root' and password == '123456':
return HttpResponse("登录成功!")
else:
return HttpResponse("登录失败!")
(4)对登录失败情况处理
login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>用户登录</h1>
<form method="post" action="/login/">
{% csrf_token %}
<input type="text" name="user" placeholder="用户名">
<input type="password" name="pwd" placeholder="密码">
<input type="submit" value="提交"/>
<span style="color: red">{
{ error_msg }}</span>
</form>
</body>
</html>
访问:
(5)对登录成功情况处理
def login(request):
if request.method == "GET":
return render(request,'login.html')
#如果是POST请求,获取用户提交的数据
print(request.POST)
username=request.POST.get("user")
password = request.POST.get("pwd")
if username == 'root' and password == '123456':
#return HttpResponse("登录成功!")
return redirect("https://blog.csdn.net/qq_51701007?spm=1000.2115.3001.5343")
#return HttpResponse("登录失败!")
return render(request,'login.html',{"error_msg":"用户名或密码错误!"})
完成上传gitee。