Flask框架 一

Flask 的基本概念

Flask 是一个非常轻量级的框架,提供了搭建 Web 服务的必要组件。
一个简单的flask 程序

# 倒入Flask类
from flask import  Flask


# 实例化一个Flask对象
app = Flask(__name__)
# __name__是当前目录的名字,是这个成程序的根目录
# 作用:根据这个参数确定flask的根目录,从而更快的查找模板和html文件的默认路径


# 创建一个路由,路由可以理解为,url和pytho程序中的函数之间的映射关系
@app.route('/')
# 视图函数,返回给用户的内容
def hello():
    return '<h1>hello world</h1>'


# 运行flask应用,可以指定ip和端口
app.run()

注意:__name__的意思是模块或者包的名称,默认的是当前文件所在的目录
路由:路由在python和url之间形成了一种映射关系,而每个路由又绑定了一个视图函数,因此,url间接的执行了视图函数。
视图函数:返回给浏览器的内容。

flask中一些方法

  • render_template
    利用render_template在视图函数中,和templates中的html文件进行一个连接。
  • url_for
    根据传入的视图函数找到他路由
  • redirect
    根据传入的路由,定向到对应的视图函数。

动态url

产生背景:一个页面中,含有用户传入的信息,开发者不可能为每个用户创建一个url和页面内容,只能根据用户传入的数据构建用户自己的url和相应的内容。

rom flask import Flask,request

app = Flask(__name__)

# 动态路由
# 1.url里面可以标记变量形式为<变量名>
# 2.动态路由里面变量的类型 int,string,float,path,uuid

@app.route('/<user>/')
def login(user):
    return '欢迎%s来到社区' %user

# 特殊的url地址: http://www.baidu.com/query?id=123&name=westos
@app.route('/query')
def query():
    # 获取url地址里面对应的value值
    id = request.args.get('id')
    name = request.args.get('name')
    return 'id:%s,name:%s' %(id,name)


app.run()

注意:在传入的数据中,也可以加数据类型。

http中get方法和post方法

om flask import Flask, render_template, request, abort, redirect, url_for

app = Flask(__name__)

@app.route('/index/')
def index():
    return render_template('index.html')

@app.route('/login/',methods=['POST','GET'])
def login():
    if request.method == 'POST':
        user = request.form['name']
        #注意:这里获取表单里数据的方式
        # request.form[]
        passwd = request.form['passwd']
        if user == 'root' and passwd == 'westos':
            return redirect(url_for('index'))
        else:
            abort(404)

    else:
        return render_template('login.html')


app.run()

分析:如果要从某个html文件要上传数据,有post和个他两种方法:
post:不会将传入的信息显示在url里面
get:会显示在url‘里面,不利于信息的保密
上面login函数的分析:
当第一次通过url加载时,会执行外部else里面的内容
然后,当我输入密码和名字点击登陆时,根据form表单里面的内容action=post会执行外面的if的语句。

模板引擎

jinja2常用语法:
for循环:
    {% for i in li %}
    {% endfor %}
    
if语句:
    {% if user == "westos" %}
    
    {elif user = 'linux"}
    
    {% else %}
     
    {% endif %}
from flask import Flask,render_template

app = Flask(__name__)

class User(object):
    def __init__(self,name,passwd):
        self.name = name
        self.passwd = passwd

    def __str__(self):
        return "<User:%s>" %self.name


@app.route('/')
def index1():
    name = 'python'
    li = [1,2,3]
    d =dict(a=1,b=2)
    u = User('python','linux')
    return render_template('index.html',
                           name=name,
                           li=li,
                           d=d,
                           u=u)


app.run()

对应的index1.html文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    {{ name }}<br>
    {{ li }}<br>
    {{ d }}<br>
    {{ u }}
</body>
</html>

结果:
在这里插入图片描述

自定义过滤器

import time
from flask  import Flask,render_template

app = Flask(__name__)

class User(object):
    def __init__(self,name,passwd):
        self.name = name
        self.passwd = passwd

    def __str__(self):
        return "<User:%s>" %self.name

# 自定义一个过滤器
def format_data(value):
    ttime = time.localtime(value)
    return time.strftime('%Y-%M-%D %H:%m:%s')

# 像一个app里面添加一个过滤器
app.add_template_filter(format_data,'format_data')

@app.route('/index2/')
def index2():
    name = 'python'
    li = [1,2,3]
    d =dict(a=1,b=2)
    u = User('python','linux')
    return render_template('index2.html',
                           name=name,
                           li=li,
                           d=d,
                           u=u,
                           time = time.time())

app.run()

index2对应的html文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<!--常见的字符串操作-->
    {{ name | upper }} <br>
    {{ name | lower }} <br>
    {{ "hello" | capitalize }} <br>
    {{ name | reverse }} <br>
<!--常见的数值操作-->
    {{ -12.578411935 | round }} <br>
    {{ -12.21795872 | round | abs }} <br>

<!--常见的列表操作-->
    {{ li }} <br>
    {{ li | first }} <br>
    {{ li | last }} <br>
    {{ li | length }} <br>
    {{ li | sum }} <br>
    {{ li | sort | reverse }} <br>
    {{ li | join(':') }} <br>

<!--对字典的操作-->
    {% for i in d %}
    {{ i }}
    {% endfor %}
<!--自定义函数-->
    {{ time | format_data }}


</body>
</html>

结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值