一.某个事件发生的起因(可跳过)
在给朋友写一个 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))
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,操作更方便哦