常用js库和框架(vue&element ui与webpy)

Posted 嵌入式-老费

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了常用js库和框架(vue&element ui与webpy)相关的知识,希望对你有一定的参考价值。

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        编写前端代码的同学都知道,目前最火的前端代码是vue&element ui,而后端个人又比较喜欢用webpy,那么这两者是怎么配合的。现在都说要实现前后端分离,两者的json数据又是怎么交互的?正好可以花点时间交流下。

1、代码融合

        webpy代码比较简单,除了app.py之外,一般还有一个templates目录。这个templates目录就是mvc架构里面的v。而vue&element ui最终生成的是一个index.html加一个static目录,static目录中包含有js、css、fonts等子目录。所以,现在需要做的就是四步,

        第一步,将static拷贝到和app.py平级的目录,

        第二步,创建一个templates目录,将index.html文件拷贝到templates目录下,

        第三步,修改index.html文件,第一行添加如下内容,原有内容移到第二行,

$def with ()

        第四行,添加一个base.html文件,

$def with (page)

$:page

        有了这四步之后,前后端就可以整合在一起了。

2、api的使用

        既然前后端实现了分离,那么除了第一次index.html之外,其他前后端的交互基本上都是用api来完成的,数据部分基本也都是json。这个时候,就需要分成两种情况。第一种,调试的时候,使用代理来实现调试;第二种,部署的时候,直接调试。

        在分析两种使用场景之前,可以先看下js里面一般是怎么用axios访问数据的,

	methods:
		getdata:function()
			this.axios(
					method:'post',
					url:'/api',
					data:'key1=1&key2=2'
				).then(response=> 
					console.log(response.data)
				).catch(error=> 
					console.log(error)
				)
		
	

        这是一个典型的axios应用场景。访问的方法是api,输入的数据是key1和key2。

2.1 代理测试

        如果是代理测试,那么势必要进行代理配置。项目中有vue.config.js的话,一般proxy在这个文件里面。如果没有这个文件,项目工程使用vue init来实现的,那么代理配置在build/webpack.dev.conf下面,直接修改proxy部分,

	proxy: 
      '/api': 
        target: 'http://localhost:8086',
        pathRewrite:'^/api':'',
        ws: true,
        changeOrigin: true
      
    ,

        有了这个配置,我们在npm run dev启动前端代码后,就可以让js访问到另外一个ip&端口的后端。这样势必涉及到url跨域的问题,所以webpy的工程也要稍作修改,

#python api_web.py 8086
import web
import json
 
urls = (
    '/(.*)', 'hello'
)

app = web.application(urls, globals())
 
 
class hello:
    def GET(self,name):
        web.header("Access-Control-Allow-Origin", "*")
        data1 = web.data()
        print(data1)
        print type(data1)
        return json.dumps('status':'ok')

    def POST(self,name):
        web.header("Access-Control-Allow-Origin", "*")
        data1 = web.data()
        print(data1)
        print type(data1)
        return json.dumps('status':'ok')
        #json_data = json.loads(data1)
        #return json_data
 
 
if __name__ == "__main__":
    app.run()

          上述代码中最重要的部分就是web.header的设置,有了这句话,基本上就可以解决跨域问题。当然,如果我们的代码是部署在iis中,那么就要在iis中解决web server跨域的问题。

2.2 正常测试

        有了上面的代理测试,正常测试就比较容易。唯一一个需要修改的地方,就是参数的个数问题。同样是后端webpy,如果两者是正常组合测试,那么同样的功能后端的代码是这么写的,

import web
import json

urls = (
    '/', 'hello',
	'/api', 'api'
)

render = web.template.render("templates", base="base")
app = web.application(urls, globals())

class hello:
    def GET(self):
        return render.index()

class api:
	def POST(self):
		print web.data()
		return json.dumps('status':'ok')

if __name__ == "__main__":
    app.run()

        了解了上面这几点,基本上就可以掌握了前后端联调的方法了。

以上是关于常用js库和框架(vue&element ui与webpy)的主要内容,如果未能解决你的问题,请参考以下文章

vue.js+ element 增删改查

常用js库和框架(three.js)

常用js库和框架(ueditor)

常用js库和框架(echarts)

Element+Vue.js 选择器常用属性

常用js库和框架(jsPlumb)