要想编写数据库接口,必然要先能够读取数据库,本文以python中常用的库pymysql为例。需要事先安装好pymysql。
# 连接数据库
db = pymysql.connect(host='127.0.0.1', user='root', password='root用户的密码', database='数据库名称')
# 获取游标对象
cursor = db.cursor()
# 查找数据
sql_select = 'select * from 查询的表名 '
# 执行sql
cursor.execute(sql_select)
results = cursor.fetchall()
# 关闭数据库
db.close()
数据库的查询结果就在results中,可自行print查看。
json_data = []
for i in results:
result = {"a": i[0], "b": i[1], "c": i[2]}
json_data.append(result)
jsondatar = json.dumps(json_data, ensure_ascii=False)
对results进行遍历,abcd是字段名称,然后将数据转化成json,jsondatar就是结果。
在本文中数据库默认为云服务器上的mysql数据库,所以需要将数据库连接信息修改,host是服务器主机ip。
这里推荐用flask框架开发接口,因为flask非常轻量,代码结构简单,非常好学,熟悉其他web框架的基本看一下就懂了。下面上代码。
from flask import Flask
import pymysql
import json
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'hello world!'
需要事先安装flask,安装方法直接“pip install flask”,完成这些代码以后,在本地run一下,浏览器地址输入http://127.0.0.1:5000/
就可以看到hello world了。
同理,接口开发类似
from flask import Flask
import pymysql
import json
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'hello world!'
@app.route("/id=")
def api(id):
request_id = int(id)
global real_json
# 打开数据库,读取内容
try:
file = get_data()
j1 = json.loads(file)
# print(type(j1))
# print(j1)
real_json = "未找到该数据"
for i in j1:
# 索引ID
id = i['id']
if request_id == id:
real_json = json.dumps(i, ensure_ascii=False)
expect:
print("连接数据库失败")
body = real_json
# response = "\n" + body + "\n"
response = body
print("\nresponse data:", response)
return response
if __name__ == '__main__':
app.run()
第一节中的连接数据库操作可以封装成get_data函数,返回的json数据在api函数中被接收,同时api函数接收客户端发送的id,使用此id把该id对应的数据从json中取出,并再封装成json,作为响应体返回给客户端。同样先run程序,浏览器中输入“http://127.0.0.1:5000/id=1”访问,此时会返回数据库中id为1的数据。此时一个本地的flask服务端就搭建完成。
云服务器大部分均为linux系统,所以必须要具有一定的linux命令基础。
首先必须的要求是,先确认服务器上的python环境,使用xshell6连接服务器,命令行键入python -V,看是否有效果,如无效果,请百度linux下的python安装及环境变量配置。
确认python环境后,先pip安装uwsgi,安装完成后,将本地编写的flask项目使用xftp6上传到服务器文件夹,cd到这个文件夹,新建一个uwsgi.ini文件。放上最简单的配置文件内容。
[uwsgi]
http = 0.0.0.0:8080
wsgi-file = api.py
callable = app
第一行是uwsgi服务器的端口且允许所有ip访问,第二行是flask项目的文件名,第三行是uwsgi默认识别文件中的application函数,将其修改为flask的app函数。
完成uwsgi.ini文件配置后,在当前文件夹执行命令 “uwsgi uwsgi.ini”,这个执行命令的前提是:当前操作系统python是全局环境且uwsgi安装在全局环境中,否则会提示uwsgi命令未找到。
若这一切工作都完成后,没有出错的话,现在在本地浏览器中输入云服务器ip,端口为8080访问的话,就会出现hello world,如果没有出现,有可能是某些云服务器提供商需要申请开通8080端口,请自行替换成已开通的端口(比如默认的80)或者申请开通8080端口。
若最后能够成功访问,那么一个uwsgi服务器已经成功搭建。此时如果使用ctrl + c命令中止的话,会发现接口又无法访问了,那是因为进程中断了,需要我们使uwsgi能够持续运行,键入命令“uwsgi -d --ini uwsgi.ini”,然后刷新浏览器就会发现正常访问了。
一般情况下,如果只使用uwsgi能够实现的访问的话,也基本算完成一个接口了,但是因为云服务器往往不止运行一个程序,所以就需要一个管理者,这个管理者就是nginx,所有访问云服务器的请求都会被nginx所接收,然后调配资源将请求分发给云服务器上的执行程序,再接收云服务器端返回的请求,转发给客户端。说白了,类似于邮政快递系统,所有快递进来都要先经过当地的快递集散点,然后由快递集中点调配快递员运往个人,寄快递的时候也一样。而快递集中点不会总让某一个快递员送快递,所以就会给每个快递员大致均等的任务量,这点在服务器上被称为负载均衡。
首先安装nginx,安装方法自行百度,然后找到nginx安装位置
ps -ef | grep nginx
会有这样一条显示出来
root 2694 1 0 May11 ? 00:00:00 nginx: master process /www/server/nginx/sbin/nginx -c /www/server/nginx/conf/nginx.conf
/www/server/nginx/conf/nginx.conf便是nginx的配置文件的位置,然后修改该配置文件,用vi编辑器也行或者xftp6中右键该文件用记事本编辑该文件。推荐用vi编辑器,因为显示比较友好,尽管vi操作起来有点麻烦。打开查看该文件直接看最后一行,看有没有include xxxxxxxxx的语句,如果有的话请cd到include后面的的文件路径,然后在那个文件夹下创建自定义的xxx.conf名文件。同样编辑新建的这个文件。
server {
listen 8080;
# 这里是监听8080端口,请自行替换为当前服务器已经开放的端口
server_name 替换成服务器的ip;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8081;
#8081需要与uwsgi.ini文件中的端口对应,自行修改
uwsgi_param UWSGI_SCRIPT wsgi;
uwsgi_param UWSGI_CHDIR /web;
#项目文件的文件夹
index index.html index.htm;
client_max_body_size 35m;
}
}
完成以上注释中的替换后,保存文件,命令行启动或重启nginx。
启动命令:nginx
重启命令:nginx –s reload
启动后在本地浏览器输入云服务器ip+自己配置监听的端口号,会发现会报502页面,这基本可以确认nginx配置正确了,更严谨的方法就是查看端口是否被nginx占用。
lsof -i :8080
如果这些全都没报错,那么就可以进入下个阶段了。
nginx正常启动后,8080端口就会被占用,上节中我们uwsgi配置的就是8080端口,所以需要修改为其他空闲端口,这里设置8081端口,一步到位就是修改uwsgi.ini文件,第一行修改为
socket = 0.0.0.0:8081
同时需要检查上节编写的文件名xxxx.conf的nginx配置文件,这一行
uwsgi_pass 127.0.0.1:8081;
端口必须也是8081,完成修改后保存。
命令行键入“uwsgi -d --ini uwsgi.ini”使服务启动,然后再访问nginx监听的8080端口,测试成功即完成接口开发。
笔者在这之前对这个部署是一窍不通,也不会写接口,纯粹0起步,所以在当我琢磨透之后就写此篇博客,希望能帮到跟我有同样 困扰的你,最后这个一套流程下来bug是真的不少,笔者单单python环境都给我头疼的要命,linux命令也不熟悉,遇到了太多的bug跟错误,我的解决办法是先把错误用有道词典给翻译了,毕竟笔者英文水平也不高,这一下可以基本解决50%的问题。剩下的百度错误,看看有没有好的解决方案,记得在尝试这些解决方案的时候先进行备份,不然会很乱。实在解决不了了,请在本文下面评论,我会尽力为你解答,也希望我们能够共同进步。