Django项目(2)-处理get/post请求

当一个项目能够正常启动,能够正常返回一个页面的时候,那么页面上表单提交如何处理呢?

向后台提交请求,分为get和post

首先来说get

1.需要一个可以提交信息的页面,就用一个之前的页面,templetes下的home.html

这是一个form表单,form表单的action代表了这个submit提交后的参数处理的路由是什么,这里我的路由是/students/stu/login

首先在根目录下找到进入students路由,students路由是包含了stu和stu/login  我们要看我们在students所在的项目url中看,配置的是什么

红色表示当访问127.0.0.1:8000/students/stu的时候回返回login模块中的news

蓝色表示当访问127.0.0.1:8000/students/stu/login的时候会返回login模块中的login_user方法

我们就可以指定form表单提交的action地址是蓝色的地址,这样就会调用方法处理提交的数据

在stu 程序中新增一个py文件,输入以下内容:

# coding=utf-8

from django.http import HttpResponse
from django.shortcuts import render
#登录首页
def news(request):
    try:
        return render(request,'home.html')
    except:# 
        return HttpResponse('error')
#处理登录
def login_user(request):
    username=request.GET.get('username',"")
    password=request.GET.get('password',"")
    
    if username=="张三" and password=="123456":
        return HttpResponse('登录成功')
    
    return HttpResponse("登录失败!")

其中,username是接受的前端传回的参数,requets.GET.get的意思是,前端form标段采用get方法传入参数,我获取参数的值,“username”是input框的name,必填,后面的是如果没填写,用空值替代

保存后重启服务,访问127.0.0.1:8000/students/stu

会返回home的页面

当在用户名和密码中输入提交后,浏览器的地址就会变为

其中你提交的值变为了url的一部分,只有当html的method和处理程序中的requets方法一致都是get的时候,才能成功执行,不然返回的是失败的内容

再说post

post就是修改页面和响应的请求为post

def login_user(request):
    username=request.POST.get('username',"")
    password=request.POST.get('password',"")
    
    if username=="张三" and password=="123456":
        return HttpResponse('登录成功')
    
    return HttpResponse("登录失败!")
<form  action="/students/stu/login/"; method="post">

重启后登录发现,哎,报错403

咋回事?

是因为在程序的setting文件中有这么一个验证

CSRF # 表示django全局发送post请求均需要字符串验证
功能:防止跨站请求伪造的功能
工作原理:客户端访问服务器端,在服务器端正常返回给客户端数据的时候,而外返回给客户端一段字符串,等到客户端下次访问服务器
端时,服务器端会到客户端查找先前返回的字符串,如果找到则继续,找不到就拒绝。

咋办呢?看看下面我添加了什么

		<form  action="/students/stu/login/"; method="post">
			{% csrf_token %}
			<p>
				<span>用户名:</span>
				<input type="text" name="username" />

			</p>
			<p>
				<span>密码:</span>
				<input type="password" name="password"/>
			</p>
			<p>
				<input type="submit" value="登录" />
			</p>
		</form>
	</body>

在form表单里面写入一个{% csrf_token %},代表我提交的时候就生成这么一个字符串,后端就会验证字符串啦,也就不会报错了

同样,这是一个很简单的方法,当使用ajax传参数的时候,也需要加上ajax相应的代码

$.ajaxSetup({
            data:{csrfmiddlewaretoken:'{{ csrf_token }}'},---------
        });

之后再写传参

ok

 

2.我想返回一个处理函数,处理后再返回值给请求:

在urls中添加:

path('open', user.opendriver),

在user文件中新建一个函数opendriver ,这里我用selenium的driver举例

import time
from selenium import webdriver
def opendriver(request):

    return HttpResponse(hh())

def hh():
    d = webdriver.Chrome()
    d.get("http://101.36.181.117:88/cqnsbg/")
    time.sleep(3)
    d.close()
    return("打开浏览器成功")

新建的函数,返回的是一个hh()的函数,这个函数调用 了浏览器,调用完成后要返回return,一定要返回,不返回东西,opendriver方法调用会报错

这里实验一下,主要是发现了新建的django项目用的默认的虚拟环境venv,要想使用selenium库,需要在当前目录的venv的script中使用pip进行安装,安装后即可使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值