背景说明
python:3.6.5
Django:2.1.1
Project:Kubernetes
,文件夹路径就是/django/Kubernetes/
App:createyaml
,文件夹路径就是/django/Kubernetes/createyaml
前文地址:https://rorschachchan.github.io/2018/09/26/Django%E4%BD%BF%E7%94%A8form%E8%A1%A8%E5%8D%95%E5%88%A4%E6%96%AD%E8%BE%93%E5%85%A5%E5%80%BC%E6%98%AF%E5%90%A6%E5%90%88%E6%B3%95/
需求说明
之前我们已经达到了“页面判断输入值是否合法”,“页面输入值录入数据库”这两个目的,现在就到了重头戏–网页上点击按钮,然后调用后台python脚本,并且把脚本的结果反馈到网页端。
我们本次使用一个加密的python脚本encrypt.py
,它主要得作用是输入某个字段,然后进行AES256加密,然后把加密结果返回给界面,整个脚本内容如下:
1 |
|
笨方法解决
前端的页面内容如下:
1 | {% extends 'base.html' %} #这部分是引入base.html这个模板 |
目前已知views.py
里使用request.POST.get()
方法是可以捕获到前端输入值,但是这个输入值怎么传递给encrypt.py
呢?这一点非常的复杂。
可能这个时候很多人会想使用“外部脚本引入django系统”的方法,但是那个方法可以引用到数据库,但是无法引用views.py
里的函数的变量。于是只能用一个笨招:先把前端输入值记录到本地某个文件里,然后encrypt.py
去读取这个文件,这样达到获取变量的方法。
于是views.py
里的相关部分就是这样:
1 | def encrypt(request): |
而encrypt.py
内容改成如下:
1 | #!/usr/bin/env python |
这样的操作达到了目的!后期就是把result
使用render
加工映射到某个网页,页面就好看很多了。
js+ajax方法解决
上面的方法虽然可以达到我们想要的目的,但是其实是十分不推荐的:一是因为网页调用本地程序的权限正在被取消,二是因为真不如JS写直接,三是只能在自己本地调用。
所以还是用前端来解决更专业更优雅,那么就要使用js+ajax。
具体内容下次补充…
补充
在外部脚本引入django系统的方法就是在外部脚本的开头加上下面的内容:
1 |
|
但是上面说过,这个方法可以引入数据库models.py
文件,并不能引入views.py
文件。
参考资料
https://stackoverflow.com/questions/15151133/execute-a-python-script-on-button-click
https://blog.csdn.net/yzy_1996/article/details/80223053
https://simpleisbetterthancomplex.com/tutorial/2016/08/29/how-to-work-with-ajax-request-with-django.html
https://www.candypapi.com/2017/11/02/Python-external-script-calls-the-Django-project-model-table/
https://segmentfault.com/q/1010000005096919