美文网首页
flask常用操作

flask常用操作

作者: 华尔街的主导曲 | 来源:发表于2019-12-03 16:52 被阅读0次

# 安装Flask

pip install Flask #flask==1.0.2指定版本

# 基础示例

from flask import Flask

app=Flask(__name__)

#(不设置默认当前目录,static,template)

#app=Flask(__name__,

#    static_folder = "./dist/static", #设置静态文件路径

#    template_folder = "./dist" #设置模板路径

#    static_url_path='', #设置从根目录读取文件路径 /img/xxx

#)

#<配置热更新

app.jinja_env.auto_reload = True

app.config['TEMPLATES_AUTO_RELOAD'] = True

#>

@app.route('/') # route() 装饰器来告诉 Flask 触发函数的 URL

def index():

  return 'index page'

@app.route('/home/<int:uid>')

def home(uid):

  return 'home page %s'%uid

if __name__ == '__main__':

  app.run(host='127.0.0.1',port=8085) #监听运行 debug模式:debug=True, host='0.0.0.0' 允许所有访问

# @app.route 变量规则

1. <username> string 接受任何不包含斜杠的文本

@app.route('/user/<username>')

def show_user_profile(username):

2. int 接受正整数, float 接受正浮点数

@app.route('/post/<int:uid>')

def show_post(uid):

3. path 类似 string ,但可以包含斜杠

@app.route('/path/<path:subpath>')

def show_subpath(subpath):

4.正则URL示例

from flask import Flask

from werkzeug.routing import BaseConverter

class Regex_url(BaseConverter):

    def __init__(self,url_map,*args):

        super(Regex_url,self).__init__(url_map)

        self.regex = args[0]

app = Flask(__name__)

app.url_map.converters['re'] = Regex_url

@app.route('/user/<re("[a-z]{3}"):id>')

def hello_itcast(id):

    return 'hello %s' %id

# url_for() 函数用于构建指定函数的 URL

from flask import Flask,url_for

@app.route('/home')

def home():

    ...

@app.route('/user/<username>')

def profile(username):

    ...

print(url_for('home', page='11')) # /home?page=11

print(url_for('profile', username='John Doe')) # /user/John%20Doe

# 设置接收请求方式

-----------

from flask import request,make_response,render_template,jsonify

@app.route('/login', methods=['GET', 'POST'])

def login():

    if request.method == 'POST':

      name=request.form.get('username', '') #post拿数据

      return jsonify({'name':name}) # jsonify 函数转换JSON数据

    else:

      name=request.args.get('username', '') #get拿数据

# 重定向和错误

使用 redirect() 函数可以重定向。使用 abort() 可以 更早退出请求,并返回错误代码:

from flask import abort, redirect, url_for

@app.route('/')

def index():

    return redirect('/login')

@app.route('/login')

def login():

    abort(404)

@app.errorhandler(404) # errorhandler() 装饰器可以定制出错页面

def page_not_found(error):

    return render_template('404.html')

----

# 操作session

from flask import Flask, session, escape

app = Flask(__name__)

#使用会话之前你必须设置一个密钥

app.secret_key = b'_5#y2L"F4Q8z\n\xec]/'

1. session['username'] = 666 #设置

2. session['username'] #获取

3. session.pop('username', None) #删除

4. escape(s) 将字符串s中的字符&,<,>,'和'转换为HTML安全序列

------

# 操作cookies

1.读取 cookies

request.cookies.get('username')

2.储存 cookies

@app.route('/')

def index():

    resp = make_response(render_template(...))

    resp.set_cookie('username', 'the username')

    return resp

注意:cookies 设置在响应对象上。通常只是从视图函数返回字符串, Flask 会把它们 转换为响应对象。如果你想显式地转换,那么可以使用 make_response() 函数,然后再修改它。

------------

# 静态文件

只要在你的包或模块旁边创建一个名为 static 的文件夹就行了同templates一样,静态文件位于应用的 /static 中

# 渲染模板

Flask 会在 templates 文件夹内寻找模板。因此,如果你的应用是一个模块, 那么模板文件夹应该在模块旁边;如果是一个包,那么就应该在包里面:

情形 1 : 一个模块:

/application.py

/templates

    /hello.html

情形 2 : 一个包:

/application

    /__init__.py

    /templates

        /hello.html

例:

from flask import render_template #使用 render_template() 方法可以渲染模板

@app.route('/hello/')

@app.route('/hello/<name>')

def hello(name=None):

    return render_template('hello.html', name=name)

#文件上传

--------

from flask import request

@app.route('/upload', methods=['GET', 'POST'])

def upload_file():

    if request.method == 'POST':

        f = request.files['the_file'] #拿到数据

        f.save('/uploads/%s'%f.filename) #filename获取文件名,并保存

---------

#模块化路径蓝图设置

1.main.py 主

from flask import Flask

#导入蓝图对象

from login import logins

app = Flask(__name__)

@app.route('/')

def hello_world():

    return 'Hello World!'

#注册蓝图,第一个参数logins是蓝图对象,url_prefix参数默认值是根路由,如果指定,会在蓝图注册的路由url中添加前缀。

app.register_blueprint(logins,url_prefix='') #url_prefix='/login'

if __name__ == '__main__':

    app.run()

2.login.py 副

from flask import Blueprint,render_template

#创建蓝图,第一个参数指定了蓝图的名字。

logins = Blueprint('login',__name__)

@logins.route('/login')

def login():

    return render_template('login.html')

#简单封装自定义数据库操作

pip3 install PyMySQL

1.创建db.py

----------

import pymysql

from flask import g

class DB():

    def __init__(self,host="localhost",name="root",pw="12345678",base="test"):

        if 'db' not in g:

            g.db=pymysql.connect(host,name,pw,base)

        self.cur=g.db.cursor(cursor = pymysql.cursors.DictCursor) #获取操作游标 ,取值字典类型

        self.conn=g.db #拿到db

    def close_db(self,e=None):

        db=g.pop('db',None)

        if db is not None:

            db.close()

    def exec_sql(self, sql, *args):

        try:

            rows = self.cur.execute(sql, args)  # rows记录受影响的行

            if sql.strip().lower().startswith('select') or sql.strip().lower().startswith('show'):

                res = self.cur.fetchall()

                return res

            else:

                self.conn.commit()  # 非查询语句需要提交才能生效

                res = rows

                return res

        except Exception as e:

            return e

    def __del__(self):

        self.close_db()

----

2.使用方式

from flask import Flask,jsonify

from db import DB

app=Flask(__name__)

@app.route('/getAll')

def index():

  db=DB(base="info")

  arr=db.exec_sql('select * from name where id>%s',1) #避免sql注入

  return jsonify({'code':200,'data':arr})

-----------

#使用Flask-SQLAlchemy管理数据库

---------

1.安装依赖

pip install flask-sqlalchemy

pip install flask-mysqldb

#常用的SQLAlchemy字段类型

-----

类型名   python中类型       说明

Integer       int     普通整数,一般是32位

SmallInteger  int     取值范围小的整数,一般是16位

BigInteger int或long 不限制精度的整数

Float       float     浮点数

Numeric decimal.Decimal 普通整数,一般是32位

String       str     变长字符串

Text       str     变长字符串,对较长或不限长度的字符串做了优化

Unicode     unicode 变长Unicode字符串

UnicodeText unicode 变长Unicode字符串,对较长或不限长度的字符串做了优化

Boolean       bool     布尔值

Date    datetime.date 时间

Time  datetime.datetime 日期和时间

LargeBinary   str      二进制文件

-----------

#常用的SQLAlchemy列选项

------

选项名     说明

primary_key 如果为True,代表表的主键

unique     如果为True,代表这列不允许出现重复的值

index     如果为True,为这列创建索引,提高查询效率

nullable 如果为True,允许有空值,如果为False,不允许有空值

default     为这列定义默认值

-------

#常用的SQLAlchemy关系选项

-----

选项名          说明

backref        在关系的另一模型中添加反向引用

primary join  明确指定两个模型之间使用的联结条件

uselist       如果为False,不使用列表,而使用标量值

order_by   指定关系中记录的排序方式

secondary   指定多对多中记录的排序方式

secondary join 在SQLAlchemy中无法自行决定时,指定多对多关系中的二级联结条件

--------

相关文章

  • flask常用操作

    # 安装Flask pip install Flask #flask==1.0.2指定版本 # 基础示例 from...

  • flask基础

    一个最简单的flask程序 flask基础操作 模板的使用 1、使用双括号表示一个变量{{ name }}常用变量...

  • Flask 开发中的踩坑

    flask中常用的包有: Flask Flask-Cache Flask-DebugToolbar Flask-E...

  • Python Web框架 Flask - Flask

    python常用框架 Django + Flask + Tornado + Twisted Flask微框...

  • Flask 常用库整理

    flask-script 为 Flask 提供强大的命令行操作,与 Django shell 类似。 Flask-...

  • Python学习

    python-flask框架学习(四) flask 模板文件操作 1、控制操作 用 {%%} 定义的控制代码块,可...

  • Flask 开发笔记

    Flask开发笔记 安装Flask pip install Flask 获取参数 常用的两种获取参数的方式,get...

  • Flask 如何使用 Bootstrap 来美化页面?

    本篇接着《Flask 极简 CRUD 操作》继续讲解怎样让页面变得漂亮。在《Flask 极简 CRUD 操作》中,...

  • flask orm

    django是有orm操作的 可想而知 那么flask也是有orm操作的,其实flask的orm操作的使用和djn...

  • Flask数据库的链接和模块

    Flask SQLAlchemy操作数据库 1、Flask连接数据库: (1)安装flask_sqlalchemy...

网友评论

      本文标题:flask常用操作

      本文链接:https://www.haomeiwen.com/subject/wqxhgctx.html