这几年一直在it行业里摸爬滚打,一路走来,不少总结了一些python行业里的高频面试,看到大部分初入行的新鲜血液,还在为各样的面试题答案或收录有各种困难问题
于是乎,我自己开发了一款面试宝典,希望能帮到大家,也希望有更多的Python新人真正加入从事到这个行业里,让python火不只是停留在广告上。
微信小程序搜索:Python面试宝典
或可关注原创个人博客:https://lienze.tech
也可关注微信公众号,不定时发送各类有趣猎奇的技术文章:Python编程学习
Flask 是一个微框架
“微”(micro) 并不意味着你要把整个web应用放到一个python文件里(虽然确实可以),也不意味着Flask 在功能上有所欠缺
微框架中的“微”意味着 Flask 旨在保持核心功能的简单而易于扩展
Flask 不会替你做出太多决策,比如使用何种数据库;而那些 Flask 帮你做好的决策(比如使用哪种模板引擎),都是很容易替换
除此之外的一切都由可由你掌握
在Python中,什么是模版?就是在一个静态HTML加入一些类似变量的标签,然后引擎在渲染这个HTML时候会动态的把变量填入内容,生成一个最终的HTML
什么是模版引擎?其实就是一种能解析类似Python语言的标记语言的解释器
那么jinja模版引擎就是这样的一个玩意儿,类似Django学习过程中的template模版引擎
首先我们要了解的,一个Web应用的本质是啥?
其实就是如下几步
那么知道了一个Web应用的工作流程,那么我们也就可以开始实现一个简单的web了吗?
但其实并没有那么简单
接受HTTP请求、解析HTTP请求、发送HTTP响应都是苦力活,如果我们自己来写这些底层代码,还没开始写动态HTML呢,就得花个把月去读HTTP规范
那么正确的做法是啥呢?
正确的做法是其实是,把底层代码使用专门的服务器软件实现
我们用只是Python专注于生成HTML文档,或Json数据,在开发一款Web应用时,尽可能少的去接触到TCP连接、HTTP原始请求和响应格式
所以,需要一个统一的接口,让我们专心用Python编写Web业务,这个接口就是WSGI:Web Server Gateway Interface
通过封装好的WSGI接口就可以只考虑接受请求,返回响应,让你的Web开发非常轻松,只是掉现成的方法即可
pip install flask
你必须要体验的hello world
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, World!'
if __name__ == '__main__':
app.run(debug=True,port=8000)
首先创建一个该类的实例
app = Flask(__name__)
第一个参数是应用模块或者包的名称,如果这是一个单一模块,那么直接使用__name__
即可
__name__
是python的一个内置类属性,它天生就存在于一个 python 程序中,代表对应程序名称
这个参数是必需的,这样 Flask 才能知道在哪里可以找到模板和 静态文件等东西
使用route装饰器定义路由,/代表首页,这个很简单
@app.route('/')
定义视图,封装响应,返回个简单的Hello,world字符串
def hello_world():
return 'Hello, World!'
启动服务
if __name__ == '__main__':
app.run()
虽然 flask 命令可以方便地启动一个本地开发服务器,但是每次应用代码修改之后都需要手动重启服务器,这样不是很方便,如果打开调试模式,那么服务器会在修改应用代码之后自动重启,并且当应用出错时还会提供一个有用的调试界面让你准确定位错误或者得到更多提示信息
在app.run()中加一个参数, 'debug=True'
就可以开启debug模式
if __name__ == '__main__':
app.run(debug=True)
将app
的debug
属性赋值为True
app = Flask(__name__)
app.debug = True
在pycharm中点击run,选择edit configuration, 勾选FlASK_DEBUG,然后接可以开启调试模式了
命令行设置测试环境,并使用flask run命令使用
export FLASK_ENV=development # linux
set FLASK_ENV=development # win
flask的配置文件有诸多做法,比如基本的如下设置
app.config["DEBUG"] = True
app.debug = True
app.config.from_pyfile("settings.py")
settings.py文件长得可能像下面这样
DEBUG = True # 调试模式
SECRET_KEY = "ZeGe NB" # session密钥
app.config.from_object("settings.BaseConfig")
这其实是从一个叫settings里的文件导入Config的类对象,这个类对象可能长下面这样
class BaseConfig: # 基本配置类
SECRET_KEY = os.getenv('SECRET_KEY', 'some secret words')
ITEMS_PER_PAGE = 10
class DevelopmentConfig(BaseConfig):
# 开发环境
DEBUG = True
class TestingConfig(BaseConfig):
# 上线环境
TESTING = True
app.config.from_envvar("环境变量名称")
app.config.from_json("json文件名称")
app.config.from_mapping({
'DEBUG': True})