Python Flask 实用tips :接口实现 | 操纵数据库等

一、Flask简介

Flask是一个基于Python语言的轻量级web开发框架,通过 pip 命令即可快速安装

pip install flask

推荐参考书目:《Flask Web开发:基于Python的Web应用开发实战》

二、启动服务器

编写简单代码就可以快速构建Web服务

from flask import Flask

app = Flask(__name__)

# 主页
@app.route('/')
def index():
    return "Hi Flask!"

if __name__ == '__main__':
    app.debug=True  # 默认开启debug模式
    # host=0.0.0.0 port=5000
    app.run('0.0.0.0', 5000)

运行以上.py文件将在本地5000端口开启Flask服务器

概念补充说明 —— 装饰器语法与路由

python装饰器语法

用函数封装一个函数

在函数A前使用 @anotherFunctionName,指将该函数A作为参数传入anotherFunctionName,由anotherFunctionName修饰运行

route 即路由,在flask中以装饰器语法的形式使用的。以👇代码为例:@app.route('/')用来修饰index()函数,表示根目录页面的内容将由index()函数的返回值决定

# 主页
@app.route('/')
def index():
    return "Hi Flask!"
实现动态路由

在Flask中也可以很方便的实现动态路由(随路由变化而响应不同页面内容)

@app.route('/user/<name>')	# <name> 就是可变部分
def user(name):	# name作为函数的参数被获得
    return '<h1>Hello,{}!</h1>'.format(name)

使用动态路由,就可以很轻松的为任意用户“定制”个性化页面了

三、配置跨域访问

当使用前后端分离架构时,往往会遇到跨域请求资源的情况。如果在浏览器控制台看到这样的错误:CORS policy

Access to XMLHttpRequest at ‘xxx’ from origin ‘xxx’ has been blocked by CORS policy: Response to preflight request doesn’t pass access control check: No ‘Access-Control-Allow-Origin’ header is present on the requested resource.

说明需要为服务器配置允许跨域访问。在 Flask 中,已有成熟第三方库可以解决这个问题。你需要这样👇修改你的.py代码

from flask_cors import *	# pip install flask_cors

app = Flask(__name__)
CORS(app, resources=r'/*')	# 允许任意主机请求资源

四、静态文件路径

服务器在渲染页面时总有用到静态文件的时候。当为Flask准备静态文件时,有着严格的目录格式规定:

文件夹
    | - app.py (flask APP - 你的flask服务器.py文件)
    | - templates (模板文件夹 - 模板 会在 五、模板渲染 中提到)
    |           | - a.html (网页模板a)
    |           | - b.html (网页模板b)
    |           | - c.html (网页模板c)
    |			...
    |
    | - static (静态文件文件夹)
            | - images (图片文件夹)
            | - srcipts (js文件夹)
            | - styles (css文件夹)
        	...

templatesstatic目录是必须的,且要和你的服务器.py文件在同一目录下。至于它们里面内容,是可变的。为了使用静态文件,对你的代码进行一点修改

# app = Flask(__name__)
# 指定静态文件目录
app = Flask(__name__,static_url_path='/static/',template_folder='templates')

五、模板渲染

使用同一套模板渲染不同的页面,对于传统静态网页开发而言,模板渲染的优势不言而喻。还记得 templates 文件夹吗,它被用于放置网页模板。
使用render_template()方法,可以快速将文件夹中的模板渲染成页面👇

from flask render_template
@app.route('/<user>')
def user_page(user):
    return render_template("user.html",user = user)

网页模板的写法

user作为参数被传给模板。想在模板中使用参数,你的模板页面(模板页面是html+css+js格式)需要遵循如下语法,即用双花括号 {{}} 包裹你的变量

<div>
{{user}}
</div>

此外,模板中还可以使用简单的控制语句:分支 and 循环

ps:如果模板 {{}} 语法和其他前端库冲突(比如 vue ),可以用 {% raw %}{% endraw %}分割不同部分,告诉 jinja2(Flask的模板引擎)它的职责范围:

{% raw %}
<div>
{{vue代码}}
</div>
{% endraw %}

六、实现GET/POST接口

这里直接给出两个demo示例

GET

from flask import request
import json

@app.route('/api/get_name', methods=['GET'])
def get_name():
    '''
    comment here
    '''
    # value=request.args.get('key') # 想用GET传参?你可以这样获取参数
    result=doSomething();
	
	# 把结果格式化为json形式回传
    return json.dumps({'result':result},ensure_ascii=False)

POST

from flask import request
import json

@app.route('/api/post_sth', methods=['POST'])
def post_sth():
    '''
    comment here
    '''
    value=request.form['key']	# 获取表单传来的数据
    result=doSomething()
    
    # 把结果格式化为json形式回传
    return json.dumps({'result':result},ensure_ascii=False)

七、使用 pymysql 操纵 MySQL 数据库

链接数据库的语法是固定的,但要注意MySQL版本的问题。5.7和8.0使用不同的链接语法

import pymysql

db = pymysql.connect(host='主机ip', user='用户名', password='密码', database='数据库名') # MySQL 5.7

# db = pymysql.connect("主机ip","用户名","密码","数据库名" ) # MySQL 8.0
 
cursor = db.cursor()    # 创建一个游标对象

sql="""要执行的SQL语句;"""

cursor.execute(sql) # 执行语句
data=cursor.fetchall()  # 获取元组形式查询结果 .fatchone()方法获取单条数据
db.close() # 关闭连接

附:Flask常用代码生成器

Flask的常用功能语法框架大都固定。为了方便、快速构建 flask 应用,写了一个Flask基础代码生成器:收录了像GET/POST接口、数据库操作等固定模板;选定demo一键复制,欢迎试用😋

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值