Flask框架入门学习

from flask import Flask          导入Flask扩展

app = Flask(__name__)            创建Flask应用实例
                                 __name__的作用:为了确认资源所在路径                          

@app.route('/')                  定义路由及视图函数
def index():                     路由默认只支持GET      
    return 'hello world'


if __name__ == '__main__':       启动程序
    app.run(debug=True)          执行了app.run(),就会将Flask程序运行在一个简易的服务器上
                                 服务器由Flask提供,用于测试

1、返回网页
   可以导入render_templates来返回一个网页,同时新建一个.html文件(假设名为index.html)
   使用时只需要return render_templates('index.html')
2、路由定义的基本方式
   路由默认只支持GET,需要添加,需要自行在method中指定
3、给路由进行传参
   有时我们需要将同一类URL映射到同一个视图函数中进行解析。例如:使用同一个视图函数显示不同的用户订单信息
   路由传递的参数默认当string处理
   需要在视图函数的()内填入参数名
   <>里面是定义路由的参数
   note:写路由时不要在末尾加上/
4、host:'0.0.0.0'意为允许外网访问(默认情况下只能本机访问)
   debug=True意为开启debug调试模式,代码改变浏览器自动重载,适用于development环境;反之,debug=False适用于production环境
5、设置配置文件settings.py(大写)
   调用方法:app.config.from_object(settings)        需要导入
            或者app.config.from_pyfile('settings')
6、request和response对象
   请求行:URL,请求方法(默认GET)
   请求头:键值对
   默认GET没有请求体

   响应行:状态码
   响应头:键值对
   响应体:内容
7、路由的变量规则

from flask import Flask

import settings

app = Flask(__name__)
app.config.from_object(settings)
data = {'a':'beijing', 'b':'shanghai', 'c':'xian'}


@app.route('/test')
def index():
    return '大家好'


@app.route('/getcity/<key>')     #URL里出现的变量名在函数括号里也必须声明
def getcity(key):
    return data.get(key)


@app.route('/add/<int:num>')
def add(num):
    result = num + 15
    return str(result)           #不能返回整形


@app.route('/index/<path:p>')
def getpath(p):
    return p


@app.route('/test/<uuid:id>')
def test(id):
    return '获取唯一标识码'

@app.route('/index404')
def err():
    return 'sorry! the file is not found!', 404

if __name__ == '__main__':
    app.run(port=8080)
利用返回response对象来实现在内容里加标签:

@app.route('/response')
def area():
    return Response('<h1>西安</h1>')

4、Jinja2模板引擎

   导入render_template

   render_template函数的第一个参数是模板的文件名,后面的参数都是键值对,表示模板中变量对应的真实值

   两个视图函数不能引用同一个模板

   用{{}}来表示变量名,这种语法叫做变量代码块

   {# #}来进行注释

app.py:

index.html:

output:

举例:

app.py:

from flask import Flask, request, render_template

import settings

app = Flask(__name__)
app.config.from_object(settings)


@app.route('/register', methods=['GET', 'POST'])
def register():
    print(request.path)
    print(request.full_path)
    print(request.args)
    print(request.args.get('username'))
    print(request.args.get('address'))
    print(request.form)                     #POST方法需要用form方法获取数据
    print(request.form.get('username'))
    print(request.form.get('address'))
    return '成功进入'


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


if __name__ == '__main__':
    print(app.url_map)   #打印路由规则表
    app.run()

index.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>首页</title>
    <style>
        div{
            width:100%;
            height:200px;
            border:2px solid red;
        }
    </style>
</head>
<body>
<h1>
    欢迎来到对抗路!
</h1>
<div>
    <ul>
        <li>hello</li>
        <li>abc</li>
        <li>world</li>
    </ul>
    <form action="/register", method="post">
        <p><input type="text" name = 'username' placeholder="请输入用户名"></p>
        <p><input type="text" name = 'address' placeholder="请输入密码"></p>
        <p><input type="submit" value="提交"></p>
    </form>
</div>
</body>
</html>

5、变量代码块的使用

   用{{}}来表示变量名,这种语法叫做变量代码块

app.py:

index.html:

output:

6、控制代码块

   用{% %}定义的控制代码块,可以实现一些语言层次的功能,比如循环或者if语句

 app.py:

index.html:

output:

7、过滤器

   过滤器的本质就是函数,有时候我们不仅仅是需要输出变量的值,我们还需要修改变量的提示,甚至格式化、运算等,而在模板中不能直接调用python的某些方法,因此就需要过滤器。

   过滤器的使用方法:变量名 | 过滤器

   {{variable | filter_name(*agrs)}}   (没有参数可省略括号)

在Jinja2中,过滤器支持链式调用,其格式为:

   {{ 'hello world' | reverse | upper }}

 

8、处理Web表单

    Web表单是Web应用程序的基本功能,是HTML页面中负责数据采集的部件,由表单标签、表单域和表单按钮三部分组成。

    在Flask中,为了处理表单,一般使用Flask-WTF扩展,它封装了WTForms,并且有验证表单数据的功能。

    例:

    目的:实现一个简单的登陆登录逻辑处理

    tips:(1)路由需要有GET和POST两种请求方式  -->需要判断请求方式

           (2)获取请求的参数

           (3)判断参数是否填写 & 密码是否相同

           (4)如果判断没问题,返回success

    导入request -->一个请求对象,可以获取请求方式、数据       

不足:报错只能在后台查看,希望将错误信息显示在网页上

9、改进

flash给模板传递消息  -->需要对内容加密,即需要设置secret key,做加密消息的混淆

模板中需要遍历消息

u解决编码问题

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值