flask学习

1,flask环境安装

  1. 安装python;

  1. 打开cmd窗口,pip install flask#安装flask

  1. 安装pycharm,最好是professional版本(闲鱼)

2,URL与视图

  1. URL与视图映射:

定义多个app.route,即可使多个url对应多个页面
以下定义了ip:port/、ip:port/index、ip:port/blog/list,一个3个url映射
from flask import Flask

app = Flask(__name__)


@app.route('/')
def hello_world():  # put application's code here
    return 'Hello World!'


@app.route('/index')
def index():  
    return '我是index'


@app.route('/blog/list')
def blog_list():  
    return '我是博客列表'


if __name__ == '__main__':
    app.run()
  1. 带参URL

带参数的url可传递参数
@app.route('/blog/<blog_id>')
def blog_list(blog_id): 
    return '您访问的博客是:%s' % blog_id
访问ip:port/blog/123时,页面打印“您访问的博客是:123”
  1. 带查询字符串的URL:使用request

from flask import request
@app.route('/book/list')
def book_list():
    page = request.args.get("page", default=1, type=int)
    return f'您获取的是第{ page }页的图书列表'

访问:ip:port/book/list时,打印:您获取的是第1页的图书列表
访问:ip:port/book/list?page=3时,打印:您获取的是第3页的图书列表

3,Jinja2功能

  1. 模板渲染:使用render_template

在templates文件夹中,添加index.html文件
index.html文件
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>这是首页</title>
</head>
<body>
<h1>测试jinja模板渲染功能</h1>
</body>
</html>
app.py文件
from flask import render_template
@app.route('/')
def hello_world():  # put application's code here
    return render_template("index.html")
访问:ip:port/时,则会访问index.html
  1. 模板传参

app.py文件
#第一种传参方式
@app.route('/blog/<blog_id>')
def blog_detail(blog_id):
return render_template("index.html", blog_id=blog_id, author="小帅")

#第二种传参方式
@app.route('/blog')
def blog_detail():
    blog_id = request.args.get("blog_id", default=1, type=int)
    return render_template("index.html", blog_id=blog_id, author="小帅")
index.html文件
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>这是博客</title>
</head>
<body>
<h1>你访问的博客id是:{{ blog_id }},作者是:{{ author }}</h1>
</body>
</html>
第一种访问:ip:port/blog/123,页面打印:“你访问的博客id是:123,作者是:小帅”
第二种访问:1)访问:ip:port/blog时,打印:"你访问的博客id是:1,作者是:小帅"; 2)访问:ip:port/blog?blog_id=123时,打印:"你访问的博客id是:123,作者是:小帅"
  1. 模板访问对象属性或字典成员

在app.py中定义类和字典
class Teacher:
    def __init__(self, name, age):
        self.name = name
        self.age = age

student = {
    "name": "张三",
    "gender": "男生"
}

@app.route('/teacher_info')
def teacher_info():
    teacher = Teacher(name="王老师", age="40")
    return render_template("index.html", teacher=teacher, student=student)

在index.html中访问

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>老师信息</title>
</head>
<body>
<div>老师是:{{ teacher.name }},年龄是:{{ teacher.age }}</div>
<div>学生是:{{ student.name }},性别是:{{ student.gender }}</div>
</body>
</html>
访问:ip:port/teacher_info后,页面打印:“老师是:王老师,年龄是:40 学生是:张三,性别是:男生”
  1. jinja2过滤器

jinja2有包括length在内30多个过滤器,用管道符号“|”使用,还可以使用app.add_template_filter()函数自定义过滤器
仍然采用上述例子,把index.html修改为:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>老师信息</title>
</head>
<body>
<div>学生姓名长度为:{{ student.name | length}}</div>
</body>
</html>
访问:ip:port/teacher_info后,页面打印:“学生姓名长度为:2”
  1. jinja2控制语句:

  • if条件

仍然采用上述例子,把index.html修改为:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>老师信息</title>
</head>
<body>
{% if teacher.age > 60 %}
    <div>已达到退休年龄</div>
{% elif teacher == 60 %}
    <div>刚达到退休年龄</div>
{% else %}
    <div>未达退休年龄</div>
{% endif %}
</body>
</html>
访问:ip:port/teacher_info后,页面打印:“未达退休年龄”
  • for循环

app.py
@app.route('/book')
def book_info():
    books = [
        {
            "name": "三国演义",
            "author": "罗贯中"
        }, {
            "name": "水浒传",
            "author": "施耐庵"
        }
    ]
    return render_template("index.html", books=books)
index.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>老师信息</title>
</head>
<body>
{% for book in books %}
    <div>图书名称:{{ book.name }},图书作者:{{ book.author }}</div>
{% endfor %}
</body>
</html>
访问:ip:port/book后,页面打印两行:
图书名称:三国演义,图书作者:罗贯中
图书名称:水浒传,图书作者:施耐庵
  1. 模板继承

使用{% extends "xxx.html" %}语法来继承
使用{% block xx %}语法来定制继承后的个性化内容
  1. 加载静态文件:图片、css、js

静态文件放在static目录下
html文件中,通过Link引入css,通过script引入js,通过img引入图片,通过{{url_for}}引入静态文件
html文件:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>老师信息</title>
    <link rel="stylesheet" href="{{ url_for('static', filename='/css/style.css') }}">
    <script src="{{ url_for('static', filename='/js/test.js') }}"></script>
</head>
<body>
<img src="{{ url_for('static', filename='images/linux.png') }}" alt="">
</body>
</html>
css文件
body{
    background-color: pink;
}
js文件
alert("我是在js中执行的")
执行效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值