【Django】开发日报_2_Day:简易用户管理系统(3)

目录

1、创建模板

2、三种请求方式

3、三种响应方式

4、案例:伪用户登录

   (1)创建模板

   (2) csrf_token校验

   (3)POST表单数据获取与处理

   (4)对登录失败情况处理

  (5)对登录成功情况处理 


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。

猜你喜欢

转载自blog.csdn.net/qq_51701007/article/details/126793704
今日推荐