Flask 1(开始入门)

写在前面

flask中文文档

https://dormousehole.readthedocs.io/en/latest/

1、开始使用

新建flask项目
在这里插入图片描述
运行试试:python app.py
在这里插入图片描述
访问:
在这里插入图片描述

1.1、写一个html标签试试

在这里插入图片描述
注意:flask修改代码是不能自动重启的,这里我们手动重启一下
在这里插入图片描述
访问
在这里插入图片描述

1.2、参数配置

①debug=True

开启调试模式,修改代码会自动重启
在这里插入图片描述
访问
在这里插入图片描述

②PIN码

打开调试模式,启动后就会自动生成PIN码,PIN码用来在页面上调试时解锁

这里我们写一个会报错的代码试试
在这里插入图片描述
访问

在这里插入图片描述
当我们需要直接在页面上调试时就可以点击右边这个黑框框,然后输入PIN码

在这里插入图片描述
就可以直接在页面输入调试代码了
在这里插入图片描述

扫描二维码关注公众号,回复: 10590130 查看本文章
③Environment: production

启动的时候会有这个警告

 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.

这个警告的大概意思是提示这是开发者服务器,不能用于生产环境中,

如果需要关掉这个提示可以这么做:

Linux环境下:
进入~/.bashrc
在这里插入图片描述
在末尾加上这句话:export FLASK_ENV=‘develop’
在这里插入图片描述
windows环境下: set FLASK_ENV=‘develop’
在这里插入图片描述

④手动指定host和端口

在这里插入图片描述

2、flask插件

2.1、想和django保持一致?

使flask在命令行里也能改host和端口:
安装插件:pip install flask-script
在这里插入图片描述
更改app.py代码并运行:python app.py runserver
在这里插入图片描述
如果这里想和django一致,也可以更改app.py为manage.py
在这里插入图片描述
在这里插入图片描述
换个host试试:python manage.py runserver -p 8000 -h 0.0.0.0 -d -r
在这里插入图片描述

3、flask的MTV模型

我们在manage.py同目录下新建App文件夹,并创建__init__.py、models.py、views.py
在这里插入图片描述
mange.py
在这里插入图片描述

from App import create_app
from flask_script import Manager


app = create_app()
manager = Manager(app=app)

if __name__ == '__main__':
    manager.run()

–init–.py

from App.views import init_route
from flask import Flask


def create_app():
    app = Flask(__name__)
    init_route(app)
    return app

views.py

def init_route(app):

    @app.route('/')
    def hello_world():

        return '学习flask中'

启动:python manage.py runserver
访问
在这里插入图片描述

4、路由

4.1、创建第二个路由

在这里插入图片描述
开启debug模式运行:python manage.py runserver -d -r
访问:http://127.0.0.1:5000/two/
在这里插入图片描述

4.2、flask-blueprint路由管理

像4.1里面那样创建路由容易出现循环引用的问题,flask-blueprint现在企业中常用的路由管理方式
安装:pip install flask-blueprint
安装完成之后修改views.py
在这里插入图片描述

from flask import Blueprint

blue = Blueprint('blue', __name__)
@blue.route('/')
def two():
    return '蓝图路由主页'

修改–init–.py

在这里插入图片描述
开启debug模式运行:python manage.py runserver -d -r
访问:http://127.0.0.1:5000
在这里插入图片描述

4.3、把views.py转化成包

我们还可以把views.py转化成包,这样来写更多更复杂的路由
在这里插入图片描述
在views下创建一个新的文件first_blue.py,并删掉原来的views.py
在这里插入图片描述
在views/init.py导入first_blue
在这里插入图片描述
启动并访问:
在这里插入图片描述
创建第二个路由试试
在这里插入图片描述

在App/views/init.py导入second_blue
在这里插入图片描述
在App/init.py注册second
在这里插入图片描述
启动并访问:
在这里插入图片描述
到这儿我们会发现注册要写两次特别麻烦,其实我们可以把注册写到里一个init里
修改App/init.py
在这里插入图片描述
修改App/views/init.py
在这里插入图片描述
这样每次添加就只用注册一次

访问
在这里插入图片描述

5、模板

在App/templates里面写一个index.html

注意:
这里app里面的视图引用的html,最好放在app目录里面的templates,否则可能会导致找不到

关于路径问题可以参考这两个网址:
https://stackoverflow.com/questions/7974771/flask-blueprint-template-folder
https://blog.csdn.net/chengmo123/article/details/100558051

在这里插入图片描述
写到视图里
在这里插入图片描述
启动并访问:python manage.py runserver -r -d
在这里插入图片描述

5.1、模板语言

flask的模板语言和django使用的是同一套模板语言。

刨坑
在这里插入图片描述
填坑
在这里插入图片描述
访问
.
在这里插入图片描述

6、模型

6.1、flask-SQLAlchemy

SQLAlchemy:是Python编程语言下的对象关系映射(ORM)工具。
先安装flask-SQLAlchemy:pip install flask-sqlalchemy
开始使用,models.py
在这里插入图片描述

from flask_sqlalchemy import SQLAlchemy

models_db = SQLAlchemy()


def init_model(app):
    models_db.init_app(app)


class User(models_db.Model):

    # int类型,主键
    id = models_db.Column(models_db.Integer, primary_key=True)
    # 字符类型,长度为16
    username = models_db.Column(models_db.String(16))


App/init.py(这里我们用的数据库是sqlite,如果要用mysql见下面注解)
在这里插入图片描述

    # 配置数据库, uri  数据库+驱动://用户名:密码@主机:端口/具体哪一个库
    app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///sqlite.db'
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
    init_model(app)

下面注解部分,如果不换成mysql可以忽略

注解:使用mysql数据库
app.config[‘SQLALCHEMY_DATABASE_URI’] = ‘mysql+pymysql://root:root@localhost:3306/HelloFlask’

使用mysql需要手动建库:
在这里插入图片描述
在这里插入图片描述
如果pymysql没有安装记得安装:pip install pymysql

first_bule.py写一个创建表的函数(sqlite和mysql都能创建)

在这里插入图片描述
运行并访问:
在这里插入图片描述
查看表是否创建成功(这里用的数据库是sqlite)
在这里插入图片描述
成功建表
在这里插入图片描述

7、改装,使得Falsk各种配置独立

7.1、单独写一个第三方扩展库文件

新建ext.py
在这里插入图片描述
把models放到ext里面
在这里插入图片描述

from flask_sqlalchemy import SQLAlchemy

models_db = SQLAlchemy()


def init_ext(app):
    models_db.init_app(app=app)

App/models.py
在这里插入图片描述
在App/—int—.py中注册
在这里插入图片描述

7.2、单独写一个setting配置文件

新建settings.py
在这里插入图片描述
settings.py内容

# 获取数据库地址
def get_db_url(dbinfo):
    engine = dbinfo.get("ENGINE") or "sqlite"
    driver = dbinfo.get("DRIVER") or "sqlite"
    user = dbinfo.get("USER") or ""
    password = dbinfo.get("PASSWORD") or ""
    host = dbinfo.get("HOST") or ""
    port = dbinfo.get("PORT") or ""
    name = dbinfo.get("NAME") or ""

    return "{}+{}://{}:{}@{}:{}/{}".format(engine, driver, user, password, host, port, name)


class Config:
    # 开发环境
    DEBUG = False
    # 测试环境
    TESTING = False
    # 数据库
    SQLALCHEMY_TRACK_MODIFICATIONS = False


# 开发环境
class DevelopConfig(Config):
    DEBUG = True

    dbinfo = {
        "ENGINE": "mysql",
        "DRIVER": "pymysql",
        "USER": "root",
        "PASSWORD": "root",
        "NAME": "HelloFlask",
        "HOST": "localhost",
        "PORT": "3306",
    }

    SQLALCHEMY_DATABASE_URI = get_db_url(dbinfo)


# 测试环境
class TestConfig(Config):
    TESTING = True

    dbinfo = {
        # 什么数据库
        "ENGINE": "mysql",
        # 驱动名
        "DRIVER": "pymysql",
        # 数据库用户名
        "USER": "root",
        # 密码
        "PASSWORD": "root",
        # 创建的库名
        "NAME": "HelloFlask",

        "HOST": "localhost",
        "PORT": "3306",
    }

    SQLALCHEMY_DATABASE_URI = get_db_url(dbinfo)


# 演示环境
class StagingConfig(Config):
    dbinfo = {
        # 什么数据库
        "ENGINE": "mysql",
        # 驱动名
        "DRIVER": "pymysql",
        # 数据库用户名
        "USER": "root",
        # 密码
        "PASSWORD": "root",
        # 创建的库名
        "NAME": "HelloFlask",

        "HOST": "localhost",
        "PORT": "3306",
    }

    SQLALCHEMY_DATABASE_URI = get_db_url(dbinfo)


# 生产环境
class ProductConfig(Config):
    DEBUG = True

    dbinfo = {
        # 什么数据库
        "ENGINE": "mysql",
        # 驱动名
        "DRIVER": "pymysql",
        # 数据库用户名
        "USER": "root",
        # 密码
        "PASSWORD": "root",
        # 创建的库名
        "NAME": "HelloFlask",

        "HOST": "localhost",
        "PORT": "3306",
    }

    SQLALCHEMY_DATABASE_URI = get_db_url(dbinfo)


envs = {
    "develop": DevelopConfig,
    "testing": TestConfig,
    "staging": StagingConfig,
    "product": ProductConfig,
    "default": DevelopConfig
}

App/–init–.py
在这里插入图片描述
写一个添加user的视图,看看配置是否成功
在这里插入图片描述
运行并访问
在这里插入图片描述
数据库
在这里插入图片描述
写一个删除整个库试试

在这里插入图片描述
访问
在这里插入图片描述
数据库:已经空了
在这里插入图片描述

7.3、使代码可以自己判断电脑环境是开发还是测试

修改App/–init–.py
在这里插入图片描述
修改manage.py
在这里插入图片描述

7.4、BASE_DIR

os.path.abspath(file)获取当前文件的绝对路径
os.path.dirname()获取当前路径的上一级路径

把BASE_DIR写到setting里面去
在这里插入图片描述

8、flask的迁移体系

安装migrate插件:pip install flask-migrate -i http://pypi.tuna.tsinghua.edu.cn/simple
ext.py
在这里插入图片描述
manage.py
在这里插入图片描述
运行初始化(只有该项目第一次使用migrate才执行这个):python manage.py db init
在这里插入图片描述
执行后会自动生成迁移文件
在这里插入图片描述
前后开始迁移:生成迁移python manage.py db migrate在这里插入图片描述
执行迁移:python manage.py db upgrade(数据库里面对应也会生成迁移记录)

在这里插入图片描述
查看数据库
在这里插入图片描述
迁移文件和记录
在这里插入图片描述

发布了136 篇原创文章 · 获赞 30 · 访问量 7097

猜你喜欢

转载自blog.csdn.net/a__int__/article/details/104209909