美文网首页
flask学习第一天

flask学习第一天

作者: 楠木cral | 来源:发表于2018-12-19 19:56 被阅读0次

    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
    
    

    相关文章

      网友评论

          本文标题:flask学习第一天

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