flask_demo.py
'''
flask的基本应用:
1. Flask基本语法
2. flask相当于是web系统的后端。所以访问flask中的内容,也是通过定义好的接口来进行访问的。
接口包括url、请求方法、请求参数、处理生成的响应结果。
3. flask中,接口的业务逻辑都是基于def来实现的。相当于一个def+route就是一个接口的全部内容。
4. 接口的参数通过request来进行接收
5. flask中写接口内容,最后一定要有return,因为return代表了响应结果的返回
'''
import pymysql
from flask import Flask, request, jsonify
from class34_flask_mock.sql_conf import sql_conn
# 部署flask服务:部署一个Web服务,提供给到用户进行访问。这是一个固定写法
app = Flask(__name__) # __name__表示当前的py文件
# jsonify默认不支持中文,所以要修改设定
app.config['JSON_AS_ASCII'] = False
# 接口示例
# 定义接口:route表示路由,也就是接口的path,请求方法通过methods来实现定义,一定要大写
@app.route('/demo', methods=['GET'])
def demo():
name = request.args.get('name')
data = {
'name': name,
'age': 18
}
return jsonify(data)
# post接口示例
@app.route('/demo_post', methods=['POST'])
def demo_post():
data = request.form['data']
value = request.form['value']
return '这是post请求中的data参数值:' + value
# login接口示例
@app.route('/login', methods=['POST'])
def login():
# 根据用户传入的账号密码来进行校验,判断用户是否存在,如果有,则登录成,无则登录失败
username = request.form.get('username')
pwd = request.form.get('pwd')
# 链接数据库
conn = pymysql.connect(**sql_conn('devs_env'))
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
try:
# 创建sql语句
sql = 'select * from user_info where username=%s and password=%s'
# 执行sql的查询,并获取结果
cursor.execute(sql, (username, pwd))
result = cursor.fetchall()
if len(result) < 1:
raise
data = {
'code': 200,
'msg': '登录成功!',
'token': result[0]['token']
}
return jsonify(data)
except:
return jsonify(message='登录失败,请确认账号或密码的正确性')
@app.route('/mock_pay', methods=['GET'])
def mock_pay():
# 支付需要传入的参数,遵循支付接口的规范要求:id、token、username、额外增加status参数
# 返回支付成功的响应结果,或者支付失败的响应结果
status = request.args.get('status')
if status == '1':
return jsonify(message='支付成功,返回blabla相关内容')
else:
return jsonify(message='支付失败,返回blabla相关内容')
if __name__ == '__main__':
# 启动flask服务。
'''
debug: 调试模式,默认为False。设置为True则表示启动debug模式
启动之后,修改代码会自行重启flask服务。一般在调试代码的时候用
host:指定IP地址。默认为127.0.0.1
port:指定启动的端口号。默认是5000
'''
app.run(debug=True)
mysql_conf.ini
[devs_env]
HOST = 127.0.0.1
PORT = 3306
USER = root
PASSWORD = root
DATABASE = test_db
request_demo.py
import requests
data = {
"username": "huangcaicai",
"pwd": "654321"
}
print(requests.post(url='http://127.0.0.1:5000/login', data=data).text)
sql_conf.py
'''
通过配置文件读取数据库配置信息,进行连接
'''
import configparser
import pathlib
# 定义数据库的链接函数
def sql_conn(env):
# 获取配置文件的路径,创建conf对象
conf = configparser.ConfigParser()
file = pathlib.Path(__file__).parents[0].resolve() / 'mysql_conf.ini'
# 读取配置信息
conf.read(file)
# 将配置文件的内容转换为字典的格式
values = dict(conf.items(env))
# 因为默认获取的内容都是str,但是port需要为int,所以需要先做数据的处理
for key in values.keys():
if key == 'port':
# 将port的value转换为int类型
values[key] = int(values[key])
# 相当于 values['port'] = int(values['port'])
return values
# sql_conn()