Flask基础

Python版本管理器(pyenv)

安装pyenv
1:  sudo apt-get install curl git 2:  sudo curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash3:  将提示的三行代码复制 # 会出现提示的三行代码,格式如下    eg:        export PATH="/root/.pyenv/bin:$PATH"        eval "$(pyenv init -)"        eval "$(pyenv virtualenv-init -)" 4: sudo vim ~/.bashrc 5: 追加刚才复制的三行代码至最后    eg:         export PATH="/root/.pyenv/bin:$PATH"        eval "$(pyenv init -)"        eval "$(pyenv virtualenv-init -)" 6: sudo source ~/.bashrc       7: sudo echo $PATH # 如果出现  .pyenv/shims 说明成功8: pyenv update # 更新
卸载pyenv
1: sudo rm -fr ~/.pyenv2: 同时删除  .bashrc 下面这些内容    export PATH="~/.pyenv/bin:$PATH"    eval "$(pyenv init -)"    eval "$(pyenv virtualenv-init -)"
安装python
1:安装依赖    sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm    sudo apt-get install libc6-dev gcc-5 2:cd ~/.pyenv3: mkdir -p cache4: 将下载的 python包 放到cache下 5: pyenv install 3.6.4 -v 6: pyenv rehash # 更新pyenv库
Python管理
1:列出pyenv已经安装的python版本    pyenv versions2: python版本切换    pyenv global 3.6.4 3:卸载python    pyenv uninstall 3.6.4

虚拟环境管理

第一种
1:Python自带环境创建    # 创建环境    python -m venv <envname>    # 激活环境    source ....pathon<envname>/bin/activate # 环境的路径    # 退出环境    deactivate
第二种
1: pip install virtualenvwrapper 2: sudovim ~/.bashrc 3: 最后一行加入 # 注意修改主机名,和python版本    if [ -f /home/dq/.pyenv/versions/3.6.4/bin/virtualenvwrapper.sh ]; then    export WORKON_HOME=$HOME/.virtualenvs    export VIRTUALENVWRAPPER_PYTHON=/home/dq/.pyenv/versions/3.6.4/bin/python    export VIRTUALENVWRAPPER_VIRTUALENV=/home/dq/.pyenv/versions/3.6.4/bin/virtualenv    source /home/dq/.pyenv/versions/3.6.4/bin/virtualenvwrapper.sh    fi4:source ~/.bashrc # 配置文件生效5: 基本使用:    # 创建环境    mkvirtualenv <envname>    # 激活环境    workon <envname>     # 退出环境    deactivate    # 列出所有的虚拟环境    lsvirtualenv    # 删除虚拟环境    rmvirtualenv <envname>    # 虚拟环境存放位置    ~/.virtualenvs/
第三种
1: pip install virtualenv2: mkdir -p /data/blog3: cd /data/blog/4: 基本使用    # 创建环境    pyenv virtualenv <envname>    # 激活环境    pyenv activate <envname>    # 退出环境    pyenv deactivate <envname>    # 虚拟存放位置 ~/.pyenv/versions/
第四种
1:pycharm编辑器自带创建虚拟环境功能

Flask依赖包

安装flask
pip install flask
包名作用
Werkzeug用于实现 WSGI ,应用和服务之间的标准 Python 接口
Jinja用于渲染页面的模板语言
MarkupSafe与 Jinja 共用,在渲染页面时用于避免不可信的输入,防止注入攻击
ItsDangerous保证数据完整性的安全标志数据,用于保护 Flask 的 session cookie
Click是一个命令行应用的框架。用于提供 flask 命令,并允许添加自定义 管理命令

创建第一个Flask应用

文件内容
from flask import Flask# 导入Flask类app = Flask(__name__)# 创建Flask类的实例@app.route('/')# 使用 route() 装饰器来告诉 Flask 触发函数的 URLdef hello_world():    # 函数名称被用于生成相关联的 URL 。函数最后返回需要在用户浏览器中显示的信息    return 'Hello, World!'
项目启动
1:手动启动:    1:终端里导出 FLASK_APP 环境变量:        export FLASK_APP=app.py    2:启动项目:        flask run    3:浏览器访问        127.0.0.0:50002:pycharm中启动:    python app.py runserver     # 文件内容中要有以下代码:        if __name__ == '__main__':        app.run()    -p # 端口号    -h # 主机名    -r # 修改代码重载    -d # 调试模式 
路由
1:变量规则:    # 关键字参数    @app.route('/user/<username>')    def show_user_profile(username):                return 'User %s' % username     127.0.0.1:5000/user/cross            # 关键字加限定类型    @app.route('/post/<int:post_id>')    def show_post(post_id):                return 'Post %d' % post_id2: 参数类型:    1:string  # 接受任何不包含斜杠的文本    2: int     # 接受正整数    3: float   # 接受正浮点数    4: path    # 类似 string ,但可以包含斜杠    5: uuid    # 接受 UUID 字符串3:唯一url和重定向行为:    1:@app.route('/projects/')    2:@app.route('/about')    # 如果浏览器访问资源路径后面一个斜杠不加的话,1路由请求不会报错,flask会自动重定向帮你加上斜杠,2:路由也不会报错    # 如果浏览器访问资源路径后面添加上一个斜杠的话2路由会报404错误 
HTTP方法
1:route装饰器中如果不声明请求方法默认是GET方法    # 如果想要使用post方法,需要声明 methods=['POST']2:eg:    from flask import request    @app.route('/login', methods=['GET', 'POST'])    def login():        if request.method == 'POST':            return do_the_login()        else:            return show_the_login_form()

Flask第一次封装

项目结构
├── App    # 项目应用│   ├── __init__.py   # 初始化文件│   ├── models.py     # 模型 创建数据库模型 orm对象关系映射│   ├── static        # 静态资源 css js img 等等│   ├── templates     # 模板,动态资源,html│   └── views.py      # 路由 试图函数├── app.py            # 整个项目文件,项目入口                 
命令行管理项目(manager.py)
1:pip install flask-script2: 基本使用    from flask import Flask    from flask_script import Manager    app = Flask(__name__)    manager = Manager(app=app)        @app.route('/')    def hello_world():        return 'Hello World!'        if __name__ == '__main__':        manager.run()3:修改项目入口文件为manager.py        4: 测试:    python manager.py runserver
初始化Flask类(__init__.py)
1:init文件封装函数实例化Flask类    from flask import Flask    def create_app():        app = Flask(__name__)        return app2:manager.py 导入函数实例化类    from flask_script import Manager    from App import create_app    app = create_app()    ..................
蓝图管理路由(views.py)
1: 蓝图(blutprint):     1:好处:            Flask蓝图提供了模块化管理程序路由的功能,使程序结构清晰、简单易懂,项目模块化,方便管理2:安装:    pip install flask-blueprint3: 蓝图使用     1:实例化蓝图        from flask import Blueprint        blue = Blueprint('first', __name__) # first为蓝图名字,多为反向解析时使用    2:装饰函数        @blue.route('/')        def hello_world():            return 'Hello World!'    3:注册蓝图(manager.py)        from App.views import blue        app.register_blueprint(blue) 或者 app.register_blueprint(blueprint=blue)   
request
方法返回值eg:
request.method返回请求方法GET/POST
request.base_url去掉get参数的urlhttp://127.0.0.1:5000/testrequest/
request.host_url只有主机和端口号的urlhttp://127.0.0.1:5000/
request.url完整的请求地址http://127.0.0.1:5000/testrequest/
request.mote_addr请求的客服端地址127.0.0.1
request.args.get('参数')GET请求获取参数cross
request.form.get('参数')POST请求获取参数cross
request.files文件上传。。。。
request.headers请求头。。。。
request.path路由中的路径。。。。
request.cookies请求中的cookie。。。。
session与request类似 也是一个内置对象 可以直接打印 print(session)。。。。
request.form['参数']POST请求获取参数cross
request.args['参数']GET请求获取参数cross
response
返回类型
1:string  # 字符串    @blue.route('/testresponse/')    def testresponse():        return '过去从未消亡,它甚至从未过去'
2:reder_template  # 模板渲染    @blue.route('/testresponse1/')    def testresponse1():        return render_template('/index.html/')
3:make_response      @blue.route('/testresponse2/')    def testresponse2():        res = make_response('<h3>过去从未消亡,它甚至从未过去</h3>')        print(type(res))        return res
4:redirect # 重定向    @blue.route('/testresponse3/')    def testresponse3():        res = redirect(url_for('first.testresponse1'))        print(type(res))        return res
5:Response    @blue.route('/testresponse4/')    def testresponse4():        name = request.args.get('name')        res = Response('你真的认识我吗?%s' % name)        return res 
会话技术