Flask框架用于WEB后端的流程以及pymysql的简单应用

一、定义

  • Flask诞生于2010年,是Armin ronacher(人名)用 Python 语言基于 Werkzeug 工具箱编写的轻量级Web开发框架。

  • Flask 本身相当于一个内核,其他几乎所有的功能都要用到扩展(邮件扩展Flask-Mail,用户认证Flask-Login,数据库Flask-SQLAlchemy),都需要用第三方的扩展来实现。比如可以用 Flask 扩展加入ORM、窗体验证工具,文件上传、身份验证等。Flask 没有默认使用的数据库,你可以选择 MySQL,也可以用 NoSQL。

  • 中文文档

Flask安装: 在PyCharm的Terminal中输入下面命令

pip install flask

二、数据准备

1、SQL数据准备:

​ (1) 添加数据库文件 (2) 创建所需数据库 (3) 导入数据

数据资源(百度网盘):
链接:https://pan.baidu.com/s/1NpAUoEIrMSvC4PmxCptnQA
提取码:cu5s

2、使用pymysql连接数据库

先下载pymysql模块,安装方式同Flask

pip install pymysql

三、Flask框架运用

1、导入Flask类

from flask import Flask

2、创建Flask类的实例对象

app = Flask(__name__)	# app为实例对象名

3、将路由映射到视图函数

@app.route('/index')	# 放在自定义处理数据方法的上面,表示该方法的数据传到对应的页面上

四、首页数据加载

思路:

  1. 定义方法 index( ),目的是返回首页所需的数据,格式为JSON字符串;
  2. 在 index( )中,使用 pymysql 模块来连接mysql数据库,创建对象得到数据。
  3. 得到数据后转换成JSON字符串,传给flask框架搭建的页面
import json
import pymysql
from flask import Flask

app = Flask(__name__)

@app.route('/index')
def index():
    """使用pymysql加载首页数据"""
    # 1. 创建连接对象
    conn = pymysql.connect(host='127.0.0.1', database='booksite', 
                           user='root', password='root')

    # 2. 创建游标对象
    cursor = conn.cursor()

    # 3. 准备SQL
    sql = 'select * from bookinfo;'

    # 4. 执行SQL
    cursor.execute(sql)

    # 5. 获取返回数据 ((), (), ())
    result = cursor.fetchall()

    # 6. 关闭游标对象和连接对象
    cursor.close()
    conn.close()

    # 7. 转换为列表套字典的形式
    data_list = []
    for data in result:
        data_list.append({
            "id": data[0],
            "name": data[1],
            "auth": data[2],
            "img_url": data[3],
            "rank": data[4]
        })

    print(data_list)

    # 8. 转换为JSON字符串
    # dumps: 将Python的对象类型, 转换为JSON字符串类型
    # loads: 将JSON字符串, 转换为Python的对象类型
    # 这个dumps在调用时, 会自动转换编码为ascii编码
    jons_str = json.dumps(data_list, ensure_ascii=False)

    return jons_str
使前端index.js文件,发送ajax请求获取数据进行渲染
  • ​ 确保url请求的端口号是Flask项目运行的端口号

  • ​ 确保url请求的路径index和Flask项目的路由地址一致

    代码:

// 首页JS文件路径: front/js/index.js
$.get('http://127.0.0.1:5000/index',function(data,status){具体代码略}

五、详情页数据加载

思路:

  1. 定义方法 index( ),目的是返回首页所需的数据,格式为JSON字符串;
  2. 在 index( )中,使用 pymysql 模块来连接mysql数据库,创建对象得到数据。
  3. 得到数据后转换成JSON字符串,传给flask框架搭建的页面
  4. 拼接之前首页数据的代码
import json
import pymysql
from flask import Flask

app = Flask(__name__)

@app.route('/detail')
def detail():

    # 1、通过请求对象获取查询参数
    # request.args 就是获取 ?id=X 的参数
    book_id = request.args.get('id', '1')
    # print(book_id)

    # 2、查询数据库
    conn = pymysql.connect(database='booksite', user='root', password='root', host='127.0.0.1')

    cursor = conn.cursor()

    sql = f'select * from bookinfo where id = {book_id}'

    cursor.execute(sql)

    result = cursor.fetchone()

    # 3、将数据转成JSON
    data_dict = {
        "id": result[0],
        "name": result[1],
        "auth": result[2],
        "img_url": result[3],
        "read": result[5],
        "comment": result[6],
        "score": result[8],
        "content": result[7],
        "synopsis": result[9]
    }

    # 4、将更新后的数据写入数据库
    read = result[5] + 1
    sql = f'update bookinfo set bread={read} where id={result[0]}'
    cursor.execute(sql)
    # 更新后必须 使用commit方法保存
    conn.commit()

    cursor.close()
    conn.close()

    json_str = json.dumps(data_dict)

    return json_str
使前端detail.js文件,发送ajax请求获取数据进行渲染
  • ​ 确保url请求的端口号是Flask项目运行的端口号

  • ​ 确保url请求的路径detail和Flask项目的路由地址一致

六、处理跨域请求问题

原因:考虑到安全性, 浏览器是不允许跨域(不同地址)访问的. 默认只有IP和端口完全一致时, 才允许访问. 由于咱们的静态服务器和动态服务器不在一个端口上, 因此会涉及跨域访问问题. 暂时的办法是设置允许跨域访问

(1) 下载flask_cors

pip install flask-cors

(2) 设置允许跨域访问

import json
import pymysql
from flask import Flask
from flask_cors import CORS

app = Flask(__name__)
CORS(app, origins='*')

七、程序完整代码:

import pymysql
import json
from flask_cors import CORS
from flask import Flask, request


# Flask函数接收一个参数__name__,指向程序所在的包
app = Flask(__name__)
# 允许web进行跨越数据访问
CORS(app, origin='*')


# @app.route 的作用是将路由映射到视图函数 index
@app.route('/')
def index():
    # 1、创建连接对象
    conn = pymysql.Connect(database='booksite', user='root', password='root', host='127.0.0.1')

    # 2、创建游标对象
    cursor = conn.cursor()

    # 3、准备SQL
    sql = 'select * from bookinfo;'

    # 4、执行SQL
    cursor.execute(sql)

    # 5、获取返回数据
    result = cursor.fetchall()
    # print(result)

    # 6、关闭游标对象和连接对象
    cursor.close()
    conn.close()

    # 7、转换成列表套字典的形式(可以被json识别)
    data_list = []
    for data in result:
      data_list.append({
          "id": data[0],
          "name": data[1],
          "auth": data[2],
          "img_url": data[3],
          "rank": data[4]
      })
    # print(data_list)

    # 8、转换成json字符串
    # (1) json.loads():loads 将JSON字符串,变成Python的对象,类似于JSON.parse
    # (2) json.dumps():dumps 将Python的对象,变成JSON字符串
    # ensure_ascii=False 默认JSON数据是按照ascii编码进行转换的,为了方便查看暂时关闭 ensure_ascii
    json_str = json.dumps(data_list, ensure_ascii=False)

    return json_str


@app.route('/detail')
def detail():

    # 1、通过请求对象获取查询参数
    # request.args 就是获取 ?id=X 的参数
    book_id = request.args.get('id', '1')
    # print(book_id)

    # 2、查询数据库
    conn = pymysql.connect(database='booksite', user='root', password='root', host='127.0.0.1')

    cursor = conn.cursor()

    sql = f'select * from bookinfo where id = {book_id}'

    cursor.execute(sql)

    result = cursor.fetchone()

    # 3、将数据转成JSON
    data_dict = {
        "id": result[0],
        "name": result[1],
        "auth": result[2],
        "img_url": result[3],
        "read": result[5],
        "comment": result[6],
        "score": result[8],
        "content": result[7],
        "synopsis": result[9]
    }

    # 4、将更新后的数据写入数据库
    read = result[5] + 1
    sql = f'update bookinfo set bread={read} where id={result[0]}'
    cursor.execute(sql)
    conn.commit()

    cursor.close()
    conn.close()

    json_str = json.dumps(data_dict)

    return json_str


if __name__ == '__main__':
    app.run(debug=True)



你可能感兴趣的:(案例,flask,python)