flask轻量web框架

8-24 867 views

一、flask优势

flask是轻量级的web框架,扩展性好,配置少,便于部署,很灵活。相对django全家桶型的web框架,显得没那么臃肿。

二、测试

flask一般用python2.x开发的比较多,扩展库也比较多,所以一般用python2.7去开发。

pip install flask     安装flask模块

经典hello world:

#cat app.py

from flask import Flask

app = Flask(__name__)

@app.route('/', methods = ['GET', 'POST'])
def hello():
    return 'Hello world!\n'

if __name__ == '__main__':
    app.run()

#python app.py

 * Serving Flask app "app" (lazy loading)
 * Environment: production
 WARNING: Do not use the development server in a production environment.
 Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

即可使用http://127.0.0.1:5000 访问flask了,返回一个Hello world!文字

二、模板文件使用
在flask项目目录下新建文件夹templates模板文件夹,在templates文件夹里新建index.html文件,用作模板文件。
#welcome实例
#cat app.py
from flask import Flask,render_template  #render_template 用于调用templates模板
app = Flask(__name__)
@app.route('/')
def hello():
    return render_template('index.html',b="Welcome!",t="NO.1") #定义了一个变量title,变量可定义多个

if __name__ == '__main__':
    app.run(debug=True)

#cat index.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>{{ t }}</title>#将变量放入模板文件
</head>

<body>
<h1>{{ b }}</h1>    #将变量放入模板文件
</body>
</html>

执行效果:

静态文件之样式表的使用:

在flask项目目录下新建文件夹static静态文件夹,在static静态文件夹里新建site.css样式表文件。

#cat site.css

body {            #定义body内容颜色
    color: red;
}

a, a:visited {    #定义超链接的颜色
    color: aquamarine;
}

pycharm有个小技巧,自动格式化代码:按住alt+ctrl+l 即可自动化格式化代码


#cat index.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>{{ t }}</title>
    <link rel="stylesheet" href="{{ url_for('static',filename='site.css') }}">          #引入样式表,注:url_for第一个参数一定是static
</head>

<body>
<h1>{{ b }}</h1>
<nav>
    <a href="{{ url_for('.services') }}">Serveice</a>
    <a href="{{ url_for('.about') }}">About</a>

</nav>
</body>
</html>

执行效果:

动态route地址匹配

1.不定义类型

@app.route('/user/<user_id>')   #user_id为自定义变量
def user(user_id):              #传参进函数,必须名称一样
    return 'User is %s' %user_id

http://localhost:5000/user/das12sa   访问时user后面接字符和数字都可以

2.定义为string

@app.route('/user/<string:user_id>')
def user(user_id):
    return 'User is %s' % user_id

3.定义为int

@app.route('/user/<int:user_id>')
def user(user_id):
    return 'User is %d' % user_id

4.正则匹配定义

from flask import Flask,render_template
from werkzeug.routing import BaseConverter

class RegexConverter(BaseConverter):            #定义一个匹配规则解析器
    def __init__(self,url_map,*items):
        super(RegexConverter,self).__init__(url_map)
        self.regex=items[0]


app = Flask(__name__)
app.url_map.converters['regex'] = RegexConverter     #解析器初始化

@app.route('/user/<regex("[0-9]{3}[a-z]{3}[A-Z]{3}"):user_id>')     #匹配规则:3个数字3个小写字母3个大写字母,顺序严格按照这个规则来
def user(user_id):
    return 'User is %s' % user_id

if __name__ == '__main__':
    app.run(debug=True)

5.简单登录页

from flask import Flask,render_template,request

@app.route('/login',methods=['GET','POST'])
def login():
    return render_template('login.html',title='Welcome',method=request.method)

在模板文件建立一个login.html文件
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>{{ title }}</title>
</head>
<body>
    <h1>HTTP 方法:{{ method }}</h1>
    <form method="post">
        <dev>
            <input type="text" placeholder="username">
        </dev>
        <dev>
            <input type="password" placeholder="password">
        </dev>
        <input type="submit">
    </form>

</body>
</html>

效果:


6.文件上传示例

from werkzeug.utils import secure_filename
from flask import Flask,render_template,request,redirect,url_for
import os
@app.route('/upload', methods=['POST', 'GET'])
def upload():
 if request.method == 'POST':
 f = request.files['file']
 basepath = os.path.dirname(__file__) # 当前文件所在路径
 upload_path = os.path.join(basepath, 'static\uploads',secure_filename(f.filename)) #注意:没有的文件夹一定要先创建,不然会提示没有该路径
 f.save(upload_path)
 return redirect(url_for('upload'))
 return render_template('upload.html')

在模板文件建立一个upload.html文件
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>文件上传示例</h1>
    <form action="" enctype='multipart/form-data' method='POST'>
        <input type="file" name="file">
        <input type="submit" value="上传">
    </form>
</body>
</html>

效果:

7.错误页面

@app.errorhandler(404)
def page_not_fond(error):
    return render_template('404.html')
在模板文件中建立404.html文件
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>404</title>
</head>
<body>
<h1>404</h1>
<h2>抱歉!</h2>
<p>您访问的页面不存在!</p>
</body>
</html>


python的zipfie简单应用

一、场景案例 需求:当开发上传某一个zip包时,自动解压到当前目录。已经解压过得zip包不再解压! 此处用到的模块有Python3自有模块os,sys,time,json,re,zipf...

阅读全文

vip电影的解析

一、出现的原因 由于各大互联网视频app均推出了“轻奢主义”的营销模式,导致了很多优质视频需要我们办这个月卡、年卡才能观看,更离谱的是腾讯最近推出了会员...

阅读全文

logging日志模块

一、日志输出合理的必要性 日式收集使我们日常工作中都会遇到的问题,而一个好的日志输出,则会给收集工作带来大大的效率提升。同时能够给程序员自己排错带来...

阅读全文

欢迎留言