flask学习第一天


title: flask框架学习day01
tags:
grammar_cjkRuby: true


主要内容:虚拟环境的搭建,路由模块化管理(Blueprint),请求与响应,flask-script

一、虚拟环境的搭建
flask的虚拟环境搭建和django差不多,安装好virtualenv,创建虚拟环境,安装flask。和django一样,将虚拟环境和代码分开放,在易记的位置分别创建env和workespace文件夹分别装虚拟环境和代码
1.安装virtualenv
在自定义的env文件夹下 执行pip install virtualenv
2.创建名为flaskenv的虚拟环境
virtualenv --no-site-packages -p path(python3的路径) flaskenv
3.安装flask
在进入flaskenv的Script(cd env/Script),执行activate命令进入虚拟环境状态,执行 pip install flask
4.进入workspace文件夹建立装代码的项目名文件夹day01(自己定义)
5.在可视化软件(例如pycharm)进行解释器配置(在django环境配置有): https://www.jianshu.com/p/e10cbaa733a5

二、flask项目基本构架
1.flask其实和django框架差不多,只是django的model/views/app/...等都已经有了,我们只需要在里面写内容就好了,而flask就需要我们自己写这些,从而也避免了很多不用的和一些不必要的文件存在项目中,只需要写这个项目需要的模块,轻便很多。
2.新建app文件包(python package),这个包文件夹自带init.py文件的,用来存放views等py文件,新建utils文件包用来存放修饰器等外部函数的,新建templates文件夹用来存放html前端页面文件的,新建好views.py、新建manage.py文件用来执行整个项目的:第一天的学习大致构架如图:

image.png

三、各个文件的实现功能简介
1.manage.py
(1)在manage.py,先在命令界面terminal中安装 pip install flask-script,然后引入flask和Manager和配置执行项目:

from flask import Flask
from flask_script import Manager
from app.views import blueprint
# 项目对象
app = Flask(__name__)

# 第二步:注册蓝图
app.register_blueprint(blueprint=blueprint, url_prefix='/app')

# 在flask项目中,Session, Cookies以及一些第三方扩展都会用到SECRET_KEY值,这是一个比较重要的配置值(增加session值的复杂度)
app.secret_key='shfkushfijhsauyfgahfu65464694451436513'

manage = Manager(app)
if __name__ == '__main__':
    # 传入参数修改ip端口等
    # app.run(host='0.0.0.0', port=8000, debug=True)
    manage.run()

2.views.py
在这个文件里面主要进行路由管理(使用Blueprint)和各个功能函数管理
(1)首先安装Blueprint,在命令行中执行pip install flask-blueprint
(2)然后引入它:from flask import Blueprint,再生成蓝图对象:blueprint = Blueprint('first', name),这个“first“是自己命名,后面会用到
(3)然后在manage.py,从views引入:from app.views import blueprint中,然后注册蓝图:app.register_blueprint(blueprint=blueprint, url_prefix='/app'),
(4)最后进行路由管理

# pip install flask-blueprint

from flask import Blueprint, url_for, make_response, request, render_template, session
from werkzeug.utils import redirect

from utils.functions import login_required
# 模块化管理路由Blueprint
# 第一步:生成蓝图对象

blueprint = Blueprint('first', __name__)

@blueprint.route('/hello/')
def hello():
    return 'Hello World!'

@blueprint.route('/redirect/')
def my_redirect():
    # redirect:跳转
    # url_for:反向解析
    # 'first.hello' :蓝图的第一个参数,
    return redirect(url_for('first.hello'))

@blueprint.route('/stu/<id>/')
def stu(id):
    # 接受参数为字符串
    return 'stu id: %s' % id

@blueprint.route('/redirect_id/')
def stu_redirect():
    return redirect(url_for('first.stu', id=3))

@blueprint.route('/make_response/')
def my_response():
    # make_response 创建响应
    # 第一个参数:响应内容
    # 第二个参数:响应状态码
    res = make_response('<h2>今天天气很不错<h2>')
    # 设置cookie,max_age以秒为单位,expires以datetime为单位
    res.set_cookie('token', '123456', max_age=6000)
    return res

@blueprint.route('/del_cookie/')
def del_cookie():
    # make_response 创建响应
    # 第一个参数:响应内容
    # 第二个参数:响应状态码
    res = make_response('<h2>删除cookie<h2>')
    # 设置cookie,max_age以秒为单位,expires以datetime为单位
    res.delete_cookie('token')
    return res

@blueprint.route('/req/', methods=['GET', 'POST', 'PUT', 'PATcH'])   # 自定义接受的请求方式
def req():
    if request.method == 'GET':
        # 获取GET请求中传递的参数request.args.get()
        # 获取GET请求中name=小明&name=小花中的name参数request.args.getlist('name')
        return 'Hello get!'

    if request.method == 'POST':
        # 获取POST请求中传递的参数,request.form
        # 获取值:request.form.get(get)或request.form.getlist()
        return 'Hello post!'

@blueprint.route('/login/', methods=['GET', 'POST'])
def login():

    if request.method == 'GET':
        return render_template('login.html')

    if request.method == 'POST':
        # 模拟登陆
        username = request.form.get('username')
        password = request.form.get('password')
        if username == 'fzx' and password == '123456789':
            session['user_id'] = 1

        return redirect(url_for('first.index'))

#1.登录校验
@blueprint.route('/index/')
@login_required
def index():
    return render_template('index.html')
    

3.functions
实现登陆校验等外部函数

    from flask import session, redirect, url_for

# 条件
# 外层函数嵌套内层函数
# 外层函数返回内层函数

from functools import wraps

def login_required(func):
    @wraps(func)
    def inner():
        if 'user_id' in session:
            return func()
        else:
            return redirect(url_for('first.login'))

    return inner

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,012评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,628评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,653评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,485评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,574评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,590评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,596评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,340评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,794评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,102评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,276评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,940评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,583评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,201评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,441评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,173评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,136评论 2 352

推荐阅读更多精彩内容