Flask框架(一)--搭建,請求,靜態文件,模板(日曆製作)

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>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章