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)

flask框架是微服务框架吗 flaskweb框架_Web

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:开启多线程
"""