项目名:
static (静态) js css
templates (模板)
app.py (运行)
web项目
mvc:
model 模型
view 视图
controller 控制器
mtv
model (模型)
templates (模板) --> html
view 视图 (python代码) 起控制作用
b/s browser server 浏览器服务器
c/s client server 客户端服务器
flask 的第一个程序
from flask import Flask
app = Flask(__name__)
# 装饰器
@app.route('/') # 路由
def hello_world(): # 视图函数 mtv:view 视图函数
return "hello world"
if __name__ == '__main__':
app.run()
* Serving Flask app 'app'
* Debug mode: off
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Running on http://127.0.0.1:5000
Press CTRL+C to quit
127.0.0.1 - - [17/Oct/2022 15:39:44] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [17/Oct/2022 15:39:45] "GET /favicon.ico HTTP/1.1" 404 -
什么是WSGI
web服务器网关接口,python web server gateway interface
是为python语言定义的web服务器和web应用程序或框架之间的一种简单而通用的接口。
run函数参数
host,port
可以自定义ip地址和端口号
app.run(host='ip地址',port='端口号')
注意:如果host改成:0.0.0.0 统一局域网可以访问,如果放在服务器上则外网可以访问。
debug
在浏览器实时查看代码修改的内容,重新加载最新的代码,如果值是True的话。 (默认是false)
debug是bool类型,叫做开启了调试模式,适用于开发环境 dev
app.run(debug=True)
配置文件
app.config()
{'ENV': 'production',
'DEBUG': False,
'TESTING': False,
'PROPAGATE_EXCEPTIONS': None,
'SECRET_KEY': None,
'PERMANENT_SESSION_LIFETIME': datetime.timedelta(days=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': None,
'TRAP_BAD_REQUEST_ERRORS': None,
'TRAP_HTTP_EXCEPTIONS': False,
'EXPLAIN_TEMPLATE_LOADING': False,
'PREFERRED_URL_SCHEME': 'http',
'JSON_AS_ASCII': None,
'JSON_SORT_KEYS': None,
'JSONIFY_PRETTYPRINT_REGULAR': None,
'JSONIFY_MIMETYPE': None,
'TEMPLATES_AUTO_RELOAD': None,
'MAX_COOKIE_SIZE': 4093}
可以看到结果是一个字典类型,可以通过‘ENV’字段修改环境
app.config['ENV'] = 'deveploment'
app.config['DEBUG'] = True
编写配置文件
创建一个配置文件settings.py
# 配置文件
ENV = 'development'
debug = True
在使用环境的时候
from flask import Flask
import settings
app = Flask(__name__)
app.config.from_object(settings)
return的返回对象
from flask import Flask, Response
@app.route("/index1")
def index1():
return '<h1>北京</h1>'
# 这种方式返回字符串,其实也相当于做了一个response对象的封装,最终返回的结果还是response对象
@app.route("/index2")
def index2():
return ("beijing","shanghai","shenzhen")
@app.route("/index3")
def index3():
return Response("这是一个response对象")
注意:当返回的是元组的时候会有问题。
@app.route("/index2")
def index2():
return "sorry! the file is not found!", 404
# 元组需要传两个值,默认会把这种情况当做元组。 后面的状态码是响应行中的状态码
还有一种可以自定义响应头部信息的方法:
from flask import Flask, Response, make_response
@app.route("/index4")
def index4():
s = """
定制响应头
"""
response = make_response(s)
response.headers["mytest"] = "123abc"
return response
request 对象
from flask import Flask, request
import setting
app = Flask(__name__)
app.config.from_object(setting)
@app.route("/index")
def index():
print(request.headers) # request对象访问对象属性
print(request.path)
print(request.base_url)
print(request.url)
return "app"
if __name__ == '__main__':
app.run()