首页 > 其他分享 >4-request对象

4-request对象

时间:2024-02-27 22:16:11浏览次数:23  
标签:username 对象 register request django POST password

前端提交数据

必备知识点

前端form表单中action属性,不写默认是当前路由地址

前端form表单中的method属性,不写默认是GET请求

前端页面

templates\register.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>注册页面</title>
    <style>
        fieldset {
            width: 300px;
        }
        legend {
            text-align: center;
        }
    </style>
</head>
<body>
<form action="">
    <fieldset>
        <legend>请输入用户名以及密码</legend>
        <label for="username">账号:</label>
        <input id="username" name="username" type="text" placeholder="在此处输入用户名">
        <br>
        <label for="password">密码:</label>
        <input id="password" name="password" type="password">
        <br>
        <input type="submit" value="提交">
        </fieldset>
</form>
</body>
</html>

image-20240227190705535

后端页面

# views.py
from django.shortcuts import render

def register(request):
    return render(request, 'register.html')
# views.py
from django.contrib import admin
from django.urls import path
from app import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('register/', views.register, name='register'),  # name='register' 表示别名
]

get提交

当form表单不填写method,直接提交时get方法,没有错误,后台可以拿到数据

post提交

当form表单提交方式为method=post时,报错如下

image-20240227191526564

解决方案,注释掉下面这个配置

# 将settings.py文件中的配置注释掉,在后面的学习中我们会逐步的解决掉这个问题
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',
]

后端获取数据

request的属性以及方法

request.method

获取发起请求的请求方式 
	一般是GET或者POST 基于表单的method方法
get请求携带的数据是由大小限制的
post请求携带的请求参数没有限制

request.POST

获取用户输入的请求数据,但不包含文件
返回的是:大写字符串

前端页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>注册页面</title>
    <style>
        fieldset {
            width: 300px;
        }

        legend {
            text-align: center;
        }
    </style>
</head>
<body>
<form action="" method="post">
    <fieldset>
        <legend>请输入用户名以及密码</legend>
        <label for="username">账号:</label>
        <input id="username" name="username" type="text" placeholder="在此处输入用户名">
        <br>
        <label for="password">密码:</label>
        <input id="password" name="password" type="password">
        <br>
        爱好:
        <input name="hobby" id="kill" type="checkbox" value="kill">
        <label for="kill">抢人头</label>
        <input name="hobby" id="fish" type="checkbox" value="fish">
        <label for="fish">摸鱼</label>
        <input name="hobby" id="cut-class" type="checkbox" value="cut-class">
        <label for="cut-class">逃课</label>
        <br>
        <input id="hobby" type="submit" value="提交">
    </fieldset>
</form>
</body>
</html>

image-20240227192823852

后端页面

# register
def register(request):
    print('request.POST', request.POST)
    print('request.GET', request.GET)
    return render(request, 'register.html')

# 当以get方式提交的时候
# request.POST <QueryDict: {}>
# request.GET <QueryDict: {'username': ['小满'], 'password': ['123'], 'hobby': ['kill', 'fish', 'cut-class']}>

# 当以post方式提交的时候
# request.POST <QueryDict: {'username': ['小满'], 'password': ['123'], 'hobby': ['kill', 'fish', 'cut-class']}>
# request.GET <QueryDict: {}>

获取值

def register(request):
    query_dict = request.POST if request.POST else request.GET  # 三元运算符 哪一个有值从哪一个里面去取
    username = query_dict.get('username')  # 获取单个值
    password = query_dict.get('password')  # 获取单个值
    hobby = query_dict.getlist('hobby')    # 获取多个值,一般是用于接收form表单的多选框数据

    print(username, password, hobby)  # 小满 123 ['抢人头', '摸鱼', '逃课']
    return render(request, 'register.html')

优化后的写法,可以这样但不建议

def register(request):
    query_dict = request.POST if request.POST else request.GET
    username, password, hobby = query_dict.values()  # 修改了这里

    print(username, password, hobby)  # 小满 11223344 逃课
    return render(request, 'register.html')

验证值

注册成功之后,跳转到登录页面

后端

# views.py
from django.shortcuts import redirect, HttpResponse, render


def login(request):
    username = request.POST.get('username')
    password = request.POST.get('password')
    if username == "小满" and password == '123':
        print(username, password)
        return render(request, 'login.html', {'username': username})
    else:
        return HttpResponse('对不起,账号或者密码错误~')


def register(request):
    if request.method == 'POST':
        response = login(request)
        if response.status_code == 200:
            return response

    return render(request, 'register.html')
# urls.py
from django.contrib import admin
from django.urls import path
from app import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('login/', views.login),
    path('register/', views.register, name='register'),  # name='register' 表示别名

前端

<!-- register.html -->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>注册页面</title>
    <style>
        fieldset {
            width: 300px;
        }

        legend {
            text-align: center;
        }
    </style>
</head>
<body>
<form action="" method="post">
    <fieldset>
        <legend>请输入用户名以及密码</legend>
        <label for="username">账号:</label>
        <input id="username" name="username" type="text" placeholder="在此处输入用户名">
        <br>
        <label for="password">密码:</label>
        <input id="password" name="password" type="password">
        <br>
        爱好:
        <input name="hobby" id="kill" type="checkbox" value="抢人头">
        <label for="kill">抢人头</label>
        <input name="hobby" id="fish" type="checkbox" value="摸鱼">
        <label for="fish">摸鱼</label>
        <input name="hobby" id="cut-class" type="checkbox" value="逃课">
        <label for="cut-class">逃课</label>
        <br>
        <input id="hobby" type="submit" value="提交">
    </fieldset>
</form>
</body>
</html>
<!-- login.html -->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>欢迎进入主界面</title>
</head>
<body>
    <p>{{ username}},恭喜您登录成功!</p>
</body>
</html>

测试阶段

正确的用户名以及密码为:小满123

当我输入了错误的用户名或者密码时

对不起,账号或者密码错误~

当我输入了正确的用户名和密码

小满,恭喜您登录成功!

标签:username,对象,register,request,django,POST,password
From: https://www.cnblogs.com/ccsvip/p/18038495

相关文章

  • = Request processing failed; nested exception is com.example.exceptio
    =Requestprocessingfailed;nestedexceptioniscom.example.exceptio关于映射文件的问题下次再介绍,这次主要总结hibernate常用主键生成策略。(1)incrementa)对主键值采取自动顺序增长的方式生成新的主键,值默认从1开始。b)原理:在当前应用实例中维持一个变量,以保存当前最......
  • python的面向对象
    面向对象的概念面向过程和面向对象是两种编程方式,这两个种方式是程序员用来代码来抽象世界的不同的方式,本身无优劣之分,针对于不同的抽象,各有利弊。面向对象更倾向于用各种模板来抽象世界,每个实例就是这种抽象的具体描述,这样可以描述更加复杂的关系,且可以让行为和属性和具体的......
  • java面向对象-第一步
    面向过程&面向对象面向过程思想◆步骤清晰简单,第一步做什么,第二步做什么….◆面对过程适合处理一些较为简单的问题◆面向对象思想◆物以类聚,分类的思维模式,思考问题首先会解决问题需要哪些分类,然后对这些分类进行单独思考。最后,才对某个分类下的细节进行面向过程的思索。面......
  • Java基础-面向对象概述
    本章重点针对面向对象的三大特征:继承、封装、多态进行详细的讲解。另外还包括抽象类、接口、内部类等概念。很多概念对于初学者来说,更多的是先进性语法性质的了解。1.面向对象-继承:1.继承的实现:继承通过如下格式实现:class子类名extends父类名[implements<接口名>]{}......
  • Java基础-面向过程和面向对象
    面向过程和面向对象都是对软件分析、设计和开发地一种思想,它指导着人们以不同的方式去分析、设计和开发软件。这两种思想是相辅相成的。面向过程:使用面向过程思想思考问题时,我们首先思考“怎么按步骤实现?”并将步骤对应成方法,一步一步,最终完成。这个思想适合简单任务,不需要过多......
  • 扩展运算符...+map+filter 在嵌套对象数组中的使用
    参考文档:使用基于嵌套值的数组过滤对象数组:https://segmentfault.com/q/1010000042989861js扩展运算符(...)的用法 :https://www.cnblogs.com/caihongmin/p/16395573.html对象的扩展运算符:https://blog.csdn.net/weixin_42265852/article/details/88739525Vue判断对象中......
  • Java面向对象之接口和抽象类的区别一目了然
    介绍相信对于Java面向对象部分,很多人很长一段时间对于接口和抽象类的区别,使用场景都不是很熟悉,同是作为抽象层重要的对象,工作中到底什么情况下使用抽象类,不是很清楚。本文就一次性把这些概念一次性说清楚,不用再烦恼了,哈哈!核心概念接口与抽象类最明显的区别可能就是使用上的......
  • npm报错:request to https://registry.npm.taobao.org failed, reason certificate has
    一、报错问题:提示淘宝镜像过期二、错误提示已经告诉原因是淘宝镜像过期了!其实,早在2021年,淘宝就发文称,npm淘宝镜像已经从registry.npm.taobao.org切换到了registry.npmmirror.com。旧域名也将于2022年5月31日停止服务(不过,直到今天HTTPS证书到期才真正不能用了)三......
  • iOS 面向对象与类
    至于未来会怎样,要走下去才知道反正路还很长,天总会亮。1.面向对象1.1什么是面向对象(OOP)面向对象ObjectOrientedProgramming。在软件开发中,我们虽然用的是面向对象的语言,但我相信绝大多数入门或者工作经验不长的同学敲出来的代码依然是大段的面向过程的思想,我们只是把面向......
  • 【16.0】JavaScript之对象
    【一】对象js中的对象是无序的属性集合我们可以把js中的对象想象成键值对,其中值可以是数据或者函数特征-在对象中属性表示行为-在对象中用方法表示可以看成Python中的字典,但是在JS中的自定义对象要比Python里面的字典操作起来更方便【二】对象创建【1】对象字面量(Objec......