Flask框架(一)--搭建,请求,静态文件,模板(日历制作)

本文详细介绍Flask轻量级框架的基本概念,包括环境搭建、路由设置、请求处理及模板系统。对比Django,解析Flask灵活性与开发效率。涵盖项目创建、请求响应、静态文件管理、模板继承等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Flask

轻量级框架:flask,web.py,tornado,开发灵活,开发效率低,可以真正体现程序员的水平。

重量级框架:django,方便程序员开发,提供大量的功能组件(站点管理,csrf_token,富文本,表单类,缓存,日志,ORM)

flask提供了什么?

  • 只能够完成最简单的请求响应
    • jinja2:模板系统
    • werkzeug:工具箱(wsgi)
  • 插件

一、开始Flask

flask版本:1.1.1

(一)创建虚拟环境

创建虚拟环境
conda create -n FlaskPath python=3.5.2
激活虚拟环境
activate FlaskPath

(二)安装flask

pip install flask==1.1.1

(三)使用Flask

搭建最简单的flask项目–hello world

在这里插入图片描述

启动

默认在5000端口
在这里插入图片描述
在这里插入图片描述

(四)代码详解

在这里插入图片描述

1.Flask()参数
import_name,传__name__
	flask项目所在的目录,所在的包位置
	决定了flask静态文件和模板文件的寻找地址
static_url_path
	静态文件的访问地址,默认值为/+static_folder,可不传

在这里插入图片描述

static_folder
	静态文件的目录名,默认值为static,可不传

在这里插入图片描述

template_folder
	模板文件的存储位置,默认值为templates,可以不传

在这里插入图片描述

2.路由

flask中的路由和django中的路由有区别

django中使用路由:

urls.py中
path('xx',xxx)

flask中使用路由:

使用装饰器
@app.route('/index/')
def index():
	xxx

flask中,写路由,需要注意:

  1. url应该以’/'开头
  2. url中应以’/‘开头,以’/'结尾
  3. 视图函数不能重名
  4. 习惯:视图和路由同名
3.路由传参

转换器语法
在这里插入图片描述
在这里插入图片描述
类型:

string 默认类型
int 整型
float 浮点型
path 包含斜杠的路径,常用于路径的拼接
	http://timgsa.baidu.com/timg/http://xxx.nipic.com

在这里插入图片描述
在这里插入图片描述

将参数类型由path改为string,参数仍为http://www.baidu.com,会报错。

uuid 通用的唯一标识码

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(五)请求

django中

request.method

request.GET.get()

request.POST.get()

flask中

默认支持get请求

获取GET请求参数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

POST

在这里插入图片描述

flask中默认不支持post请求

解决:
在这里插入图片描述
在这里插入图片描述

获取POST请求的参数

在这里插入图片描述
在这里插入图片描述

request–请求上下文
form flask import request
agrs 获取get请求的参数
form 获取post请求的参数
cookies 获取cookie
method 获取请求方式
url 获取请求url地址
file 获取请求上传的文件
headers 请求报文的头

二、静态文件

django中需要配置settings.py

flask中在flask启动文件的同目录,创建static文件,也可通过Flask参数修改
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、模板

flask使用的是jinja2的模板系统

在脚本文件同级目录创建templates目录,也可通过Flask参数修改
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(一)模板传递数据

方法一

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

方法二

在这里插入图片描述

方法三

在这里插入图片描述

**:解包

在这里插入图片描述
在这里插入图片描述

(二)模板语法

视图
在这里插入图片描述

index.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>index</title>
</head>
<body>
  <h1>我是Index</h1>
  {{ name }}
  {{ age }}
  <hr>
  {{ name.upper() }}
  <hr>
  {{ name.replace('a','x') }}
  <hr>
  {{ name.1 }}
  <hr>
  {{ name + '好水' }}
  <hr>
  {{ name.split('a') }}
  <h2>jinja2循环</h2>
  {% for one in name %}
      {{ one }}<br>
  {% endfor %}
  <hr>
  <h2>jinja2判断</h2>
  {% if name == 'hahaha' %}
      <p>正确</p>
  {% else %}
      {{ name }}
  {% endif %}
  <hr>
  <h2>字典</h2>
  {{ mydict['math'] }}<br>
  {{ mydict.math }}<br>
  {{ mydict.get('math') }}<br>
  <hr>
  {% for key in mydict.keys() %}
      {{ key }}:{{ mydict.get(key) }}<br>
  {% endfor %}
  <hr>
  <img src="/static/bqb.jpg">
</body>
</html>

在这里插入图片描述
在这里插入图片描述

(三)模板继承

与django类似

管理系统

四、制作日历

在这里插入图片描述

date.py
import calendar
import datetime
class MyDate(object):
    def __init__(self):
        now_time = datetime.datetime.now()
        year = now_time.year
        month = now_time.month

        # 初始化
        self.result=[]
        # 当月总天数
        total_day = calendar.monthrange(year, month)[1]
        # 第一天
        first_day = datetime.date(year,month,1)
        # 第一天是周几
        first_week = first_day.weekday()    # 从0开始,0代表周一,6代表周日
        last_week = datetime.date(year,month,total_day).weekday()

        all_day = [x for x in range(1,total_day+1)]
        # 前面补充empty
        lines = []
        for i in range(first_week):
            lines.append('empty')
        for j in range(7-first_week):
            lines.append(all_day.pop(0))
        self.result.append(lines)

        while all_day:
            line = []
            for i in range(7):
                if len(line)<7 and all_day:
                    line.append(all_day.pop(0))
                else:
                    line.append('empty')
            self.result.append(line)

    def get_date(self):
        # 返回结果
        return self.result
    def print_date(self):
        # 将结果打印出来
        print(self.result)

if __name__ == '__main__':
    date = MyDate()
    date.print_date()
视图

在这里插入图片描述

模板
<table class="table">
	<tr>
        <th>星期一</th>
        <th>星期二</th>
        <th>星期三</th>
        <th>星期四</th>
        <th>星期五</th>
        <th>星期六</th>
        <th>星期日</th>
    </tr>
    {% for i in range(n) %}
    <tr>
        {% for j in result[i] %}
        {% if j == 'empty' %}
        <td></td>
        {% else %}
        <td>{{ j }}</td>
        {% endif %}
        {% endfor %}
    </tr>
    {% endfor %}
</table>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值