Django中不同view视图的交互

一.某个事件发生的起因(可跳过)

在给朋友写一个 selenium 简单脚本时,考虑到客户角度来讲,绝对不能丢给他一个cmd终端,让他在一个黑呼呼的窗口进行交互设置。

但是博主又没有学过pyqt5,重新学的话又需要一些时间。

想到 jupyter notebook 可以用web网页可以进行控制,博主也会用html+css+js做一些简单的交互,也许可以用web做一些简单的交互页面!

博主做的脚本并不是很复杂,只需要web做一些简单的交互,所以使用django框架进行快速搭建。

期间就涉及到了不同 view 交互的问题,通常对不同 view 交互,可以用cache作为缓存交互。

可博主是希望控制 selenium 的主类只在需要的时候 初始化一次,其余更多时候是通过 主类 提供的方法进行控制。

Cache缓存和数据库好像都不能做到这一点,那就从源码做些简单的修改吧。
在这里插入图片描述

二.进入正题

相信看到这篇文章的朋友,对django都有一定了解了,所以简单的初始化配置博主直接跳过。

目录结构图
在这里插入图片描述
文件: templates/viewInteractions.html
用于发送简单的表单

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>view交互</title>
</head>
<body>

<form action="/action" method="get">
    <input type="text" placeholder="请输入url" name="url">
    <input type="submit" value="提交">
</form>



</body>
</html>

写一个views视图:views.py
用于打印 视图返回 request 类型

from django.shortcuts import render,redirect,reverse

# /
def home(request):
    """显示提交页面"""
    print(type(request)) # 打印request类型

    return render(request, 'viewInteractions.html')

配置url

from django.contrib import admin
from django.urls import path
from django.conf.urls import url

from .views import home # 导入视图

urlpatterns = [
    path('admin/', admin.site.urls),
    url(r'^', home, name='home'), # 配置url

]

启动django并访问url
在这里插入图片描述

查看在启动窗口打印了什么
在这里插入图片描述
可以看到 request 是位于 django.core.handlers.wsgi 下的 WSGIRequest 类型

三.到 WSGIRequest 下修改添加源码

先导入

from django.core.handlers.wsgi import WSGIRequest

利用pycharm 的:ctrl + 导入模块名
可进入目标文件查看源码
有弹窗提示的话同意就好
在这里插入图片描述
这样我们就进入源码所在的文件了
在这里插入图片描述
在WSGIRequest类上方我们新建一个测试类并初始化

# 新建的测试类
class Custom:
    """自定义一个类"""
    def __init__(self):
        self.count = 0
    pass
custom = Custom()

# 这个不用管
class WSGIRequest(HttpRequest):
    def __init__(self, environ):
	此处源码省略不写...

在WSGIRequest类中添加

self.custom = custom

在这个位置添加
在这里插入图片描述
ctrl + s 保存完毕

四.测试

修改 views.py

from django.shortcuts import render,redirect,reverse
from django.http import HttpResponse

# /
def home(request):
    """显示提交页面"""
    # print(type(request)) # 打印request类型

    return render(request, 'viewInteractions.html')

# /action
def action(request):
    """加入 自定义缓存 """
    # print(type(request))

    request.custom.url = request.GET.get('url')
    request.custom.count += 1

    return redirect(reverse('custom'))

# /custom
def custom(request):
    """ 返回自定义交互数据 """
    url = request.custom.url
    count = request.custom.count

    return HttpResponse('%s : %d'%(url, count))

配置urls.py

from django.contrib import admin
from django.urls import path
from django.conf.urls import url
from .views import home,action,custom

urlpatterns = [
    path('admin/', admin.site.urls),

    url(r'^action$', action, name='action'),
    url(r'^custom$', custom, name='custom'),
    url(r'^', home, name='home'),

]

启动django并访问
在这里插入图片描述
输入url并提交
在这里插入图片描述
请求成功并跳转到了 http://127.0.0.1:8000/custom
在这里插入图片描述
再提交
在这里插入图片描述

可以看到 url 和 数字发生了改变。
至此 不同view视图交互成功!

祝各位看官早日成为大牛哈哈。

某盘链接、Django 2.1.5
链接: https://pan.baidu.com/s/1iKlAno0X4d2uvwaaxoirGQ 提取码: in2w 复制这段内容后打开百度网盘手机App,操作更方便哦

猜你喜欢

转载自blog.csdn.net/qq_42114466/article/details/88377043