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 install flask
(venv) E:\Flask>pip list --format columns
2.5 第一个Flask程序
from flask import 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
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
from flask import request
@app. route( '/data/' )
def data ( ) :
wd = request. args. get( 'wd' )
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
from flask import request
@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
from flask import request
from flask import url_for
from flask import redirect
@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
from flask import request
from flask import 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:开启多线程
"""