当前位置: 首页 > 后端技术 > Python

真正零基础的Python开发web

时间:2023-03-25 21:12:47 Python

Python开发web服务的优点是开发效率高,可能只需要Java五分之一的代码量。有许多用于在Python中构建Web服务的框架。本文介绍两个框架,Django和bottle。Django安装首先,安装框架。安装成功。版本是1.11.28。框架文件安装在\python27\Scripts目录下(只需在您计算机上的Python安装目录中搜索Scripts即可)。创建项目首先进入\python27\Scripts目录,创建一个项目jinanwx(随便起个名字)。在同一个目录下,可以看到新建项目的目录。开发自己的模块,进入python27\Scripts\jinanwx\jinanwx。创建我们自己的模块jgotest01.py,编写简单代码如下。该模块的作用是返回一个json格式的结果。修改urls模块后,还需要修改urls.py模块。目录文件如下。就这么简单。新建一个文件,修改一个文件,大功告成。启动服务回到上层目录启动服务启动成功,尝试使用浏览器访问bottle开发功能不是特别复杂的web服务,可以考虑使用bottle框架,比Django轻量级。bottle示例在Linux下进行演示。安装首先使用bottle框架安装。只需一个命令即可。#pipinstallbottle进入python命令行importbottle,如果没有报错,就成功了。代码我的web服务只是一个文件bottleweb.py,代码如下,一些解释在代码的注释#coding=utf-8frombottleimport(run,route,get,post,put,delete,request,hook,response,static_file,app)importjsonimportMySQLdb#本例需要操作数据库,否则不用写这一行。数据库包pip可能不会安装成功。我使用yuminstallMySQL-python成功导入sysreload(sys)sys。setdefaultencoding('utf8')importbottleapp=bottle.default_app()#处理静态资源需要定义,如果没有静态资源可以不写这行#搭建vue脚手架时需要下面两个@hook内容用于前后端联调,否则跨域访问资源时会报错@hook('before_request')defvalidate():REQUEST_METHOD=request.environ.get('REQUEST_METHOD')HTTP_ACCESS_CONTROL_REQUEST_METHOD=request.environ.get('HTTP_ACCESS_CONTROL_REQUEST_METHOD')如果REQUEST_METHODS'=='HTTP_ACCESS_CONTROL_REQUEST_METHOD:request.environ['REQUEST_METHOD']=HTTP_ACCESS_CONTROL_REQUEST_METHOD@hook('after_request')defenable_cors():response.headers['Access-Control-Allow-Origin']='*'response.headers['Access-Control-Allow-Methods']='GET,POST,PUT,DELETE,OPTIONS'response.headers['Access-Control-Allow-Headers']='*'@route('/test2020/dist/')#web服务下的静态资源地址,即不要放在前端这些routes和app.route的静态资源可以不写defstat(path):returnstatic_file(path,root='./dist/')@app.route('/test2020/dist/static/js/')defjs(path):#我这样写这些目录是因为vue打包后,目录结构在dist中是static等returnstatic_file(path,root='./dist/static/js/')@app.route('/test2020/dist/static/css/')defcss(path):returnstatic_file(path,root='./dist/static/css/')@get('/test2020/date')#返回某表中的日期,看sqldefhelloins():db=MySQLdb.connect("127.0.0.1","yourusername","yourpassword","yourDBname",charset='utf8')cursor=db.cursor()sql="selectDISTINCTdatefromtesttable"printsqlcursor.execute(sql)data=cursor.fetchall()jsondata={}results=[]forrowindata:result={}result['DATE']=row[0]results.append(result)jsondata['code']=0jsondata['datas']=resultsreturnjsondata#返回json格式,方便前端vue接收处理,其实所有类型都可以返回@get('/test2020/helloworld')defhelloworld():return'helloworld!'if__name__=='__main__':run(host='0.0.0.0',port=2020,debug=True,reloader=True)在bottleweb.py所在目录执行#pythonbottleweb.pyweb服务启动,浏览器访问http://127.0.0.1:2020/test2020/helloworld看效果。如果安装了MySQL数据库,可以测试test2020/date这个url是否可以返回结果。只要数据库有如下数据,前端页面是这样的,可以给用户选择某个日期。前端采用vue+vux开发。开发完成后,将打包打印出来的东西上传到代码中提到的dist静态资源目录下。如果觉得上面的代码有点复杂,可以删除所有route,app.route,删除/test2020/date语句块,删除@hook,删除MySQL,前端的东西完全不用管。简单的bottleweb服务,相当于helloworld。上面的代码建议尝试去理解,其中涉及到静态资源和数据库,这些都是web服务所必需的。pip升级的坑分享一个pip遇到的问题,我的Python版本很低2.6.6。原来通过安装yum的epel,好用的pip就已经安装成功了。但是我每次使用pip命令的时候,底部都会提示升级你使用的是pip9.0.3版本,但是20.0.2版本可用。你应该考虑通过'pipinstall--upgradepip'命令升级我执行了pipinstall--upgradepipupgrade,然后pip命令就不能用了。而且升级之后,如果想安装回低版本的pip,是没有对应的安装包的。yum只能找到20.0.2版本(老版本会被覆盖吗?)。http://bootstrap.pypa.io/2.6/get-pip.py下载的get-pip.py无法安装成功。终于在上述地址下载了2.6版本的安装文件后,成功安装了可以使用的pip。总结与java相比,python开发的web代码更少,需要安装的库也更少。如果能够满足功能和性能需求,python可能是更好的选择。