python web(bottle框架)知行合一之-简单知识付费平台-”全栈“实践(8)---后端代码开始编写入口
PS:笔记只是为了更好表达我怎么语言表述,有些时候可能难免废话一推!
因知识有限, 如有错误, 欢迎指正!
每日细语:生活有些时候是一场逃亡,我们不能坐以待毙!
续言
上一小节我们已经完成了相关数据库建表及数据库模型的对应建立。那我们这一章开始应该是开始进入正题,开始编写后端服务接口。
首先明确的一下就是所谓的后端接口服务就是我们经常说的接口API,我们提供给前端调用一些API接口。
因为现在新增了一个关于数据库模型的出现,那么我们对应的项目结果表也改变一下,新增一个包模块来管理一下这个数据库的模型。
最新的项目结构图示:
image.png
对应生成数据库模型的命令:
Administrator@AFOD3-605031310 MINGW64 /d/python_learn/KnowledgePay
$ python -m pwiz -e postgresql -H localhost -p 5432 -u postgres -P 123456 knowledgepay> business_logic/db_model/knowledgepay_model.py
Password:
Administrator@AFOD3-605031310 MINGW64 /d/python_learn/KnowledgePay
$
image.png
bottle框架启动说明
因为我们的bottle框架自带了wsgi发的服务器,所以我们不需要额外的其他配置就可以直接的启动,就是 python main.py就可以启动web 接口服务了!
当然这只合适于本地开发及调试,因为它还是单进程的方式!我们正式部署的到线上的一般还是需要配合 uwsgi和ngixn等来启动项目!
入口类main.py
代码:
#!/usr/bin/evn python
# coding=utf-8
"""
Author = zyx
@Create_Time: 2018/4/14 0:58
@version: v1.0.0
@Contact: 308711822@qq.com
@File: main.py
@文件功能描述:
"""
import logging
import os
import sys
import bottle
from beaker.middleware import SessionMiddleware
from bottle import TEMPLATE_PATH
from bottle import default_app, run, hook, request, response, get, error, route, static_file
#############################################
# 初始化bottle框架相关参数----应用程序的主入口文件
# 调用的时候
#############################################
# 获取本脚本所在的路径
pro_path = os.path.split(os.path.realpath(__file__))[0]
sys.path.append(pro_path)
# 设置当前bottle运行提交的最大数据值为2M
bottle.BaseRequest.MEMFILE_MAX = 1024 * 1024 * 2
# 定义静态文件目录路径
static_path = os.path.join(pro_path, 'template')
# 定义模板路径
TEMPLATE_PATH.append(os.path.join(pro_path, 'template'))
# 如果不存在log文件夹, 则再当前脚本目录下创建log文件夹存放日志文件-
if not os.path.exists('log'):
os.mkdir('log')
# 定义日志目录
log_path = os.path.join(pro_path, 'log')
# print('当前日志路径------', log_path)
# 如果不存在log文件夹, 则再当前脚本目录下创建log文件夹存放日志文件-
if not os.path.exists('download'):
os.mkdir('download')
# 定义日志目录
download_path = os.path.join(pro_path, 'download')
# print('当前日志路径------', log_path)
# 定义日志输出格式-输出是信息等级的
logging.basicConfig(level=logging.INFO,
format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
filename="%s/info.log" % log_path,
filemode='a')
# 设置session参数
session_opts = {
'session.type': 'file',
'session.cookie_expires': 3600,
'session.data_dir': '/tmp/sessions/order',
'session.auto': True
}
@get('/')
def callback():
return '嗨!小钟同学!'
@get('/log/')
def callback():
pass
@error(500)
def miss(code):
# 错误页面,一般来说,可以在网站制定一个404的HTML页面,然后用return template('404')去访问404这个页面
pass
@error(404)
def miss(code):
# 错误页面,一般来说,可以在网站制定一个404的HTML页面,然后用return template('404')去访问404这个页面
pass
# 函数主入口
if __name__ == '__main__':
app_argv = SessionMiddleware(default_app(), session_opts)
run(app=app_argv, host='127.0.0.1', port=8188, debug=True, reloader=True)
else:
# 初始化email发送参数
# mail_helper.set_mail(const.MAIL)
application = SessionMiddleware(default_app(), session_opts)
右键运行:
image.png访问地址:
image.png从入口类提取关于session处理工具类
PS:建议大家去学习一下这位大神的博文!我后续的开发也都是基于他的系列文章基础上来展开的哟!
更多内容,敬请观注他的博客:http://www.cnblogs.com/EmptyFS/
从上面的入口类观察到后续,可能我们的很多的地方还是需要用到session的地方,这样的话,其实我们可以考虑一下进行提取封装一个工具类出来。
更多的工具类的提取及封装,大家可以参考大神的博文::http://www.cnblogs.com/EmptyFS/
session_helper.py
#!/usr/bin/evn python
# coding=utf-8
"""
Author = zyx
@Create_Time: 2018/4/20 14:24
@version: v1.0.0
@Contact: 308711822@qq.com
@File: session_helper.py
@文件功能描述:
"""
from bottle import request
# 设置session参数
session_opts = {
'session.type': 'file',
'session.cookie_expires': 3600,
'session.data_dir': '/tmp/sessions/order',
'session.auto': True
}
def set_session(key='', value=''):
"""设置当前用户session"""
s = request.environ.get('beaker.session')
s[key] = value
s.save()
def get_session():
"""获取当前用户session"""
return request.environ.get('beaker.session')
结束
以上笔记纯属个人学习实践总结,有兴趣的同学可以加群一起学习讨论
QQ:308711822
网友评论