01 当日内容概要
1 当日内容概要
1.1 Flask基础;
1.2 Web框架包含的基础组件;
1.2.1 路由、视图函数、模板渲染;
1.3 Flask配置文件;
1.4 Flask的路由系统;
1.5 Flask视图函数;
1.6 请求相关&响应相关;
1.7 模板的渲染;
1.8 session保持(不是所有的Web框架都提供session);
1.9 闪现;
1.10 中间件(与Django的区别很大);
1.11 蓝图(blueprint);
1.12 特殊的装饰器;
2 内容回顾;
2.1 Django和Flask的对比和认知;、
2.2 Flask和Django之间的最大不同点;
2.2.1 request/session
2.3 Flask的知识点;
2.3.1 静态文件+模板 app = Flask(__name__,...)
2.3.2 路由 @app.route('/index',methods = ["GET"])
2.3.3 视图函数
请求:
- request.form
- request.args
- request.method
响应:
- render
- redirect
session
- session['xxx'] = 123
- session.get('xx')
2.3.4 路飞学城项目;
- 管理后台;
- 导师后台;
- 主站;
2.3.5 路飞学城主站的业务;
- 课程
- 课程列表
- 课程详细
- 大纲、导师、推荐课程
- 价格策略
- 章节和课时
- 常见问题
- 深科技
- 文章列表
- 文章详细
- 收藏
- 评论
- 点赞
- 支付
- 购物车(4个函数)
- 结算中心(3个函数)
- 立即支付(1个函数)
- 知识点——Redis(持久化)、支付宝、消息推送(公众号推送模板消息)、构建数据结构
- 个人中心
- 课程中心
2.3.6 播放视频
- CC视频
- 加密视频
- 非加密视频
3 Flask框架:配置文件导入原理
3.1 如何找到这个类?
知识点: - 给你一个路径 “settings.Foo”,可以找到类并获取去其中的大写的静态字段。 settings.py class Foo: DEBUG = True TEST = True xx.py import importlib path = "settings.Foo" p,c = path.rsplit('.',maxsplit=1) m = importlib.import_module(p) cls = getattr(m,c) # 如果找到这个类? for key in dir(cls): if key.isupper(): print(key,getattr(cls,key))
4 Flask框架:配置文件使用;
4.1 通过app.py进行引入,外部进行定义;
4.2 查看app.config的内容;
app.py
from flask import Flask, render_template, request, redirect, session app = Flask(__name__) print(app.config) # app.config["DEBUG"] = True ''' <Config {'ENV': 'development', 'DEBUG': False, 'TESTING': False, 'PROPAGATE_EXCEPTIONS': None, 'PRESERVE_CONTEXT_ON_EXCEPTION': None, 'SECRET_KEY': None, 'PERMANENT_SESSION_LIFETIME': datetime.timedelta(31), 'USE_X_SENDFILE': False, 'SERVER_NAME': None, 'APPLICATION_ROOT': '/', 'SESSION_COOKIE_NAME': 'session', 'SESSION_COOKIE_DOMAIN': None, 'SESSION_COOKIE_PATH': None, 'SESSION_COOKIE_HTTPONLY': True, 'SESSION_COOKIE_SECURE': False, 'SESSION_COOKIE_SAMESITE': None, 'SESSION_REFRESH_EACH_REQUEST': True, 'MAX_CONTENT_LENGTH': None, 'SEND_FILE_MAX_AGE_DEFAULT': datetime.timedelta(0, 43200), 'TRAP_BAD_REQUEST_ERRORS': None, 'TRAP_HTTP_EXCEPTIONS': False, 'EXPLAIN_TEMPLATE_LOADING': False, 'PREFERRED_URL_SCHEME': 'http', 'JSON_AS_ASCII': True, 'JSON_SORT_KEYS': True, 'JSONIFY_PRETTYPRINT_REGULAR': False, 'JSONIFY_MIMETYPE': 'application/json', 'TEMPLATES_AUTO_RELOAD': None, 'MAX_COOKIE_SIZE': 4093}> ''' app.config.from_object("settings.ProductionConfig") if __name__ == '__main__': app.run()
settings.py
#!/usr/bin/env python3 # -*- coding:utf-8 -*- # __Author__:TQTL911 # Version:python3.6.6 # Time:2018/8/30 22:29 class Config(object): DEBUG = False TESTING = False DATABASE_URI = 'sqlite://:memory:' class ProductionConfig(Config): DATABASE_URI = 'mysql://user@localhost/foo' class DevelopmentConfig(Config): DEBUG = True class TestingConfig(Config): TESTING = True # class Base(object): # """ # 创建一个父类; # """ # xx = 123 # # # class Pro(Base): # """ # 生产环境; # """ # DEBUT = True # # # class Dev(Base): # """ # 开发环境; # """ # DEBUG = True