Flask之初始
一、简介
Flask是一个基于Python实现的Web开发‘微’框架
官方文档: http://flask.pocoo.org/docs/0.12/
中文文档: http://docs.jinkan.org/docs/flask/
Flask和Django一样,也是一个基于MVC设计模式的Web框架
Flask依赖三个库
Jinja2 模板引擎
Werkzeug WSGI工具集
Itsdangerous 基于Django的签名模块。
二、hello Flask
1、新建项目
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return 'Hello Flask'
if __name__ == '__main__':
app.run()
2、参数配置
在启动的时候还可以添加参数,在run()中
debug 是否开启调试模式,开启后修改过python代码会自动重启
threaded 是否开启多线程
port 启动指定服务器的端口号
host 主机,默认是127.0.0.1,指定为0.0.0.0代表本机所有ip
3、代码结构
static 静态资源文件
templates 模板文件
默认两个都可以直接使用
直接使用相对路径就好
模板渲染
render_template()
其实也是分为两个过程,加载和渲染
可使用template = Template(“<h2>呵呵</h2>”)
template.render()
静态使用,相当于反向解析
url_for(’static’,filename=‘hello.css’)
三、项目结构
flask_01 # 项目总目录
├── App # APP
│ ├── ext.py # 第三方扩展库(数据库等)
│ ├── __init__.py #APP的初始化文件,创建Flask对象,加载配置,初始化第三方库,初始化路由
│ ├── models.py # model类, 可以封装成包的形式
│ ├── settings.py # 项目配置文件,包括环境的配置以及数据库的配置
│ ├── templates # 模板文件夹
│ │ └── h1.html
│ └── views # 视图函数的包
│ ├── first.py
│ └── __init__.py 视图初始化,注册路由
├── manager.py # 项目入口文件
└── migrations #数据库迁移生成
├── alembic.ini
├── env.py
├── README
├── script.py.mako
└── versions
└── 5f72fb96463a_.py
1、manager
import os from flask_migrate import MigrateCommand
from flask_script import Manager from App import create_app env = os.environ.get("FLASK_ENV", "develop") app = create_app(env) manager = Manager(app=app)
manager.add_command('db', MigrateCommand) if __name__ == '__main__':
manager.run()
2、APP/init.py
from flask import Flask from App.ext import init_ext
from App.settings import envs
from App.views import init_view def create_app(env):
app = Flask(__name__) # 加载配置
app.config.from_object(envs.get(env)) # 初始化第三方扩展库
init_ext(app) # 初始化路由
init_view(app=app) return app
3、APP/ext.py
from flask_bootstrap import Bootstrap
from flask_migrate import Migrate
from flask_session import Session
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
migrate = Migrate()
def init_ext(app):
db.init_app(app)
migrate.init_app(app, db)
Session(app)
4、APP/models.py
from App.ext import models
5、APP/settings.py
import os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
def get_db_uri(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
SECRET_KEY = "Rockdafafafafafa"
# 将session存储在redis中
SESSION_TYPE = "redis"
REDIS_HOST = "123.56.243.64"
REDIS_PORT = "6379"
REDIS_DB = 0
# session长期有效,则设定session生命周期,整数秒
ERMANENT_SESSION_LIFETIME = 24 * 60 * 60
# 是否强制加盐,混淆session
SESSION_USE_SIGNER = True
# sessons是否长期有效,false,则关闭浏览器,session失效
SESSION_PERMANENT = False
SESSION_REDIS = StrictRedis(host=REDIS_HOST, port=REDIS_PORT)
SESSION_COOKIE_SECURE = True
class DevelopConfig(Config):
DEBUG = True
dbinfo = {
"ENGINE": "mysql",
"DRIVER": "pymysql",
"USER": "root",
"PASSWORD": "1",
"HOST": "localhost",
"PORT": "3306",
"NAME": "RESTful"
}
SQLALCHEMY_DATABASE_URI = get_db_uri(dbinfo)
class TestConfig(Config):
TESTING = True
dbinfo = {
"ENGINE": "mysql",
"DRIVER": "pymysql",
"USER": "root",
"PASSWORD": "2",
"HOST": "localhost",
"PORT": "3306",
"NAME": "RESTful"
}
SQLALCHEMY_DATABASE_URI = get_db_uri(dbinfo)
class StagingConfig(Config):
dbinfo = {
"ENGINE": "mysql",
"DRIVER": "pymysql",
"USER": "root",
"PASSWORD": "3",
"HOST": "localhost",
"PORT": "3306",
"NAME": "RESTful"
}
SQLALCHEMY_DATABASE_URI = get_db_uri(dbinfo)
class ProductConfig(Config):
dbinfo = {
"ENGINE": "mysql",
"DRIVER": "pymysql",
"USER": "root",
"PASSWORD": "1",
"HOST": "localhost",
"PORT": "3306",
"NAME": "RESTful"
}
SQLALCHEMY_DATABASE_URI = get_db_uri(dbinfo)
envs = {
"develop": DevelopConfig,
"testing": TestConfig,
"staging": StagingConfig,
"product": ProductConfig,
"default": DevelopConfig
}
6、APP/views/__init__.py
from App.views.first import blue def init_view(app):
app.register_blueprint(blue)
7、APP/views/first.py
from flask import Blueprint, render_template
blue = Blueprint('app', __name__)
@blue.route('/')
def hi():
return render_template('h1.html', msg='这天气适合睡觉')
Flask之初始的更多相关文章
- flask --- 01 .初始
一. 四种web框架比较 Django : 优点 - 大而全所有组件都是有组织内部开发高度定制化 教科书级别的框架 缺点 - 大到浪费资源,请求的时候需要的资源较高 Flask : 优势 - 小而精, ...
- Flask 之东方不败一
1,flask的初始 flask是Python的一个轻量级的web框架,相当于django而言. 知识点Python 三大主流web框架的对比 1.Django 主要特点是大而全,集成了很多组件,例如 ...
- 第一篇 Flask初始
Python 现阶段三大主流Web框架 Django Tornado Flask 对比 1.Django 主要特点是大而全,集成了很多组件,例如: Models Admin Form 等等, 不管你用 ...
- 初始Flask
一.Flask介绍(轻量级的框架,非常快速的就能把程序搭建起来) Flask 主要特点小而轻,原生组件几乎为0, 三方提供的组件请参考Django 非常全面,属于短小精悍型框架 Flask是一个基于P ...
- flask 初始
一.flask安装 这里提供两种安装方式: 第一种: pip3 install flask 第二种: pip3 install -i https://pypi.douban.com/simple/ f ...
- Flask备注4(Structure)
Flask备注4(Structure) package 通过Flask可以非常简单的通过一个module(一个py文件)创建一个简单的application.这种简单程序的文件结构如下: /youra ...
- Flask —— 使用Python和OpenShift进行即时Web开发
最近Packtpub找到了我,让我给他们新出版的关于Flask的书写书评.Flask是一个很流行的Python框架.那本书是Ron DuPlain写的<Flask 即时Web开发>.我决定 ...
- [python][flask][flask-SQLAlchemy]关于flask-SQLAlchemy的初级使用教程
鉴于网上关于flask-SQLAlchemy的实例使用教程参差不齐,于此写下工作学习过程中的使用过程,以便分享交流. 对于python关于flask有一定了解的高端玩家来说,请转至flask官方开发文 ...
- flask 扩展之 -- flask-sqlalchemy
flask-sqlalchemy.md 一. 安装 $ pip install flask-sqlalchemy 二. 配置 配置选项列表 : 选项 说明 SQLALCHEMY_DATABASE_UR ...
- python web -- flask
Flask是一个简洁的 Python_web 框架. 零. virtualenv 虚拟环境配置. $ easy_install pip $ pip install virtualenv $ virtu ...
随机推荐
- `go install`指令行为分析
分析go install [build flags] [packages]指令做了什么,如何实现安装GO软件,我们如何编写一个软件使得可以使用该指令安装自己编写的程序. 参考go官方文档 安装位置 $ ...
- 使用Istio灰度发布
目录 灰度发布 1. Istio 1.1 Istio介绍 1.2 Istio是如何工作的 2. 安装Istio 2.1 环境 2.2 得到二进制文件 2.3 安装istio 3. 部署bookinfo ...
- emlog 制作一个小插件(截取正文生成 xx 字摘要)的过程
blockquote { background: rgba(255, 255, 0, 1); color: rgba(255, 0, 0, 1) !important } 如果熟悉其他 PHP 平台的 ...
- Pydantic异步校验器深:构建高并发验证系统
title: Pydantic异步校验器深:构建高并发验证系统 date: 2025/3/25 updated: 2025/3/25 author: cmdragon excerpt: Pydanti ...
- pnpm create vite my-react-app --template react-ts
npm install -D pnpm npm install -D vite pnpm create vite my-react-app --template react-ts npx vite - ...
- Git 版本管理,与 SVN区别对比
一.Git vs SVN Git 和 SVN 孰优孰好,每个人有不同的体验. Git是分布式的,SVN是集中式的 这是 Git 和 SVN 最大的区别.若能掌握这个概念,两者区别基本搞懂大半.因为 G ...
- rabbitmq的消息的有顺序性
一.rabbitmq:拆分多个queue,每个queue一个consumer,就是多一些queue而已,确实是麻烦点:或者就一个queue但是对应一个consumer,然后这个consumer内部用内 ...
- java基础之二分查找,可变参运用
一. public class BinarySeachTest { public static void main(String[] args) { int[] arr = new int[]{22, ...
- MySQL 的 Change Buffer 是什么?它有什么作用?
MySQL 的 Change Buffer 1. 什么是 Change Buffer? Change Buffer 是 MySQL InnoDB 存储引擎中的一个优化机制,用于减少磁盘 I/O 操作. ...
- AXUI - 极致原生体验的零依赖的国产 Web UI 框架,欢迎体验和共建!
AXUI:专注于快速交付的国产 Web UI 框架 在日常的前端开发中,是否遇到过以下场景: 灵感乍现,希望快速通过一点代码实现原型或功能展示: 完全个人项目,开发方式自由,追求高效与便捷: 项目目标 ...