1.Web框架简介
- 良好编程的核心原则之一 ------ DRY(不要重复自己)
- 开发人员通常需要处理四项任务——数据的创建、读取、更新和删除,可称为CRUD,通过Web框架很好的解决这类问题
1.1 什么是Web框架
Web框架是用来简化Web开发的软件框架,框架的存在时为了避免重新发明轮子,并在创建一个新的网站时帮助你减轻一些开销。
典型框架提供如下常用功能:
1.管理路由
2.访问数据库
3.管理会话和Cookies
4.创建模板来显示HTML
5.促进代码的重用
2.Flask框架的使用
- Flask依赖连个外部库:Werkzeug和jinja2。
- werkzeug是一个WSGI(Web应用和多种服务器之间的标准Python接口)工具集
- Jinj2负责渲染模板
2.1 安装虚拟环境
- Virtualenv为每个不同项目提供一份Python安装;并没有真正安装多个Python副本,提供一种巧妙方法来让各个项目环境保持独立
安装:
E:\Flask>pip install virtualenv
Collecting virtualenv
Downloading virtualenv-20.0.16-py2.py3-none-any.whl (4.6 MB)
|████████████████ | 2.3 MB 40 kB/s eta 0:00:57
检测版本:
E:\Flask>virtualenv --version
virtualenv 20.0.16 from e:\flask\venv\lib\site-packages\virtualenv\__init__.py
2.2 创建虚拟环境
- 使用virtualenv命令当前文件夹中创建Python虚拟环境,新增一个venv文件夹,一个全新虚拟环境,其中只有一个私有的Python解释器
创建:
E:\Flask>virtualenv venv
2.3 激活虚拟环境
- 使用虚拟环境,需先将其“激活”
激活:
E:\Flask>venv\Scripts\activate
(venv) E:\Flask>
2.4 安装Flask
- 使用pip安装
安装:
pip install flask
- 安装完成后,检查所有安装包
(venv) E:\Flask>pip list --format columns
2.5 第一个Flask程序
from flask import Flask # 导入flask
# 实例化对象
app = Flask(__name__)
@app.route('/')
def index():
return "<h1>Hello world This is me</h1>"
if __name__ == '__main__':
app.run(host='192.168.3.15',port=8888,debug=True)
'''
@app.route()装饰器告诉Flask什么样的URL能出发函数
app.debug = True or app.run(debug=True) 开启调试模式
'''
- 运行文件
(venv) E:\Flask>python hello.py
- Serving Flask app "hello" (lazy loading)
- Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
- Debug mode: on
- Restarting with stat
- Debugger is active!
- Debugger PIN: 271-604-863
- Running on http://192.168.3.15:8888/ (Press CTRL+C to quit)
- 输入网址:http://192.168.3.15:8888/
2.6 变量规则
- 给URL添加变量,可以把这些特殊字段标记为<variable_name>,这部分可以作为命名参数传递到你的函数。
from flask import Flask # 导入flask
# 实例化对象
app = Flask(__name__)
@app.route('/welcome/<name>/')
def welcome(name):
return 'Hello %s' % name
@app.route('/user/<float:id>/')
def name(id):
return '用户id:%s' % id
if __name__ == '__main__':
app.run(host='192.168.3.15',port=8888,debug=True)
"""
int:接受整数
float:同int,但是接收浮点数
path:和默认的形似,但也接受斜线
"""
2.7 request请求
from flask import Flask # 导入flask
from flask import request # 导入请求模块
# request请求
@app.route('/data/')
def data():
# http://127.0.0.1:8080/data/?wd=kangbnazi&ie=feifei
wd = request.args.get('wd') # get请求获取参数的方式
ie = request.args.get('wd')
print('ie:',ie)
return '您传递的参数 是:%s'%wd
if __name__ == '__main__':
app.run(host='192.168.3.15',port=8888,debug=True)
2.8 指定HTTP方法
- HTTP方法告知服务器,客户端相对请求的页面做些什么,常见的方法如下。
from flask import Flask # 导入flask
from flask import request # 导入请求模块
# 指定HTTP方法
@app.route('/test',methods=['GET','POST'])
def test_method():
if request.method == 'GET': # 获取请求方式
return 'GET请求'
elif request.method == 'POST':
return 'POST请求'
else:
return '不允许的请求'
if __name__ == '__main__':
app.run(host='192.168.3.15',port=8888,debug=True)
2.9 构造URL
- url_for():方法名 反向获取到登录URL,通过redirect跳转登录
from flask import Flask # 导入flask
from flask import request # 导入请求模块
from flask import url_for # 导入url_for
from flask import redirect # 导入跳转界面
# url_for:构造URL
@app.route('/hello/')
def hello_world():
username = request.args.get('username')
if username:
return 'hello world'
else:
return redirect(url_for('haha'))
@app.route('/signin/')
def haha():
return '这是登录页面'
if __name__ == '__main__':
app.run(host='192.168.3.15',port=8888,debug=True)
"""
http://127.0.0.1:8080/hello/?username=kangbazi (输出 hello world)
http://127.0.0.1:8080/hello/(自动跳转至http://127.0.0.1:8080/signin/(输出 这是登录界面))
"""
2.10 渲染模板
- 模板是一个包含相应文本的文件,包含占位变量表示动态部分,具体值旨在请求的上下文才能知道,使用真实值替代变量,在返回最终得到的相应字符串,这一过程称为渲染
- 默认情况下Flask在程序文件的templates子文件中寻找模板
from flask import Flask # 导入flask
from flask import request # 导入请求模块
from flask import url_for # 导入url_for
from flask import redirect # 导入跳转界面
from flask import render_template # 导入渲染模板
# 模拟用户登录
@app.route('/login/',methods=['GET','POST'])
def login():
if request.method == 'GET':
return render_template('login.html')
else:
username = request.form.get('username')
password = request.form['password']
return '用户名:%s,密码:%s'%(username,password)
if __name__ == '__main__':
app.run(host='192.168.3.15',port=8888,debug=True)
"""
前端代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登录界面</title>
</head>
<body>
<form action="" method="post">
用户名:<input type="text" name="username"><br />
密码: <input type="password" name="password">
<input type="submit" value="立即登录">
</form>
</body>
</html>
"""
3.Flask-Script
- Flask-Script的作用是可以通过命令行的形式来操作Flask。例如通过命令跑一个开发版本的服务器、设置数据库,定时任务等。要使用Flask-Script,可以通过pip install flask-script安装最新版本。
- 创建manage.py,导入Manager
# 入口文件
from flask_script import Manager
from hello import app # 导入实例
manager = Manager(app) # 绑定
if __name__ == '__main__':
manager.run()
"""
启动:
python manage.py runserver -d -r -p 8080 --threaded
参数说明:
-d:开启Debug模式
-r:重新加载代码
-p:指定端口号(默认:8000)
-h:ip地址(host)
--threaded:开启多线程
"""