Python+Flask后台交互

本文主要探讨了Python的Flask框架在Web开发中的应用,强调其轻量级特性,适合业务变化频繁的场景。文中详细介绍了Flask环境的搭建、项目创建、配置管理、重定向、转换器、模板引擎、Session管理和数据迁移等方面,通过实例展示了Flask的使用方法和技巧。
摘要由CSDN通过智能技术生成

一、概况

Python Web框架有很多个,比如Django、Flask、Tornado等框架。这个三个框架在Web端是比较有影响力的,尤其是Django框架,在快速开发上占有一定的优势。但是Django框架属于重量级框架,它能想到的功能都会事先帮你想好。你只要按照它的模块要求写,一个网站就能很快速搭建出来。
Flask和Tornado框架就属于轻量级框架了,它只提供最核心的功能,其余的功能需要用自己手写或者用第三方来支持。那么到底是用Djnago还是用Flask。如果业务变化快,可以选用Flask,自己来搭建符合自己公司业务后端架构。如果业务基本不变,可以选用Django,开发起来速度比较快。Flask框架最为Python后端新生代的代表!
如果突然报错!

在这里插入图片描述

临时解决办法:

$ ps -fA | grep python
henry    127112   1181  0 12:07 ?        00:00:05 /usr/bin/python /usr/bin/x-terminal-emulator
henry    127201 124727  0 12:09 ?        00:00:01 python3 -u /home/henry/dev/myproject/flaskr/flaskr.py
henry    127252 127122  0 12:20 pts/4    00:00:00 grep --color=auto python

$ kill 127201

目前Flask的文档是1.0版本
英文文档  http://flask.pocoo.org/docs/1.0/
中文文档  http://docs.jinkan.org/docs/flask/index.html
三、环境搭建

首先安装虚拟环境,命令如下:

sudo pip3 install virtualenv

接下来还要安装虚拟环境扩展包,命令如下:

sudo pip3 install virtualenvwrapper

安装虚拟环境包装器的目的是使用更加简单的命令来管理虚拟环境。
修改用户家目录下的配置文件.bashrc,添加如下内容:

export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
source /usr/local/bin/virtualenvwrapper.sh

然后执行source .bashrc让配置生效。

创建一个名字为 flask_1.0的环境:

mkvirtualenv flask_1.0

安装Flask

pip install flask
创建Flask项目
首先打开pycharm 左上角new project

在这里插入图片描述

配置目录名 和虚拟环境 点击create 创建

写一个最简单的代码呈现
在这里插入图片描述
在这里插入图片描述

运行效果

在这里插入图片描述

代码呈现:
from flask import Flask
"""
__name__ :表示当前模块名字
创建Flask对象,Flask会传入模块的位置当做家目录
"""
app = Flask(__name__)

@app.route('/') # 代表首页

def hello_world(): # 视图函数
    return 'Hello World!'

if __name__ == '__main__':
    app.run() # 运行程序
运行 python 你的当前py文件
按住CTRL 点击

在这里插入图片描述

会出现源码 这里面初始化了好多方法

在这里插入图片描述

所以我们用,逗号间隔 书写我们要配置的参数

在这里插入图片描述

所以我们要在左侧的 static目录 创建一个html文件 里面书写一些文字

在这里插入图片描述

仔细观察下路径

原路径

在这里插入图片描述

自己设定的1807路径

在这里插入图片描述

我们可以设置一个配置文件 config.cfg这个代表 配置debug 之后可以 自动检测运行服务器时的报错

在这里插入图片描述

TEST 是我们随便起的变量 我们可以轻松利用
当我们运行当前文件时 会打印积极

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

来调用在我们的视图函数里 并打印在命令横中
同时 我们在去 配置DEbug

在if name == ‘main’:前面 来配置

# 配置文件
app.config.from_pyfile('config.cfg')
还有几种不用写文件配置的方法 我推荐写文件方法
类方式配置

class Config(object):
    DEBUG = True


app.config.from_object(Config)
直接操作
app.config["DEBUG"] = True
对象上配置
app.debug = True
参数传入配置(只限debug参数)
app.run(debug=True)  # 运行程序

在这里插入图片描述

重定向
首先导入我们需要的两个

在这里插入图片描述

当我们重定向 center函数时

在这里插入图片描述

代码如下

@app.route('/center')
def center():
    return 'center'

@app.route('/mycenter')
def mycenter():
    return redirect(url_for('center')) #函数名
当我们去请求mycenter时

在这里插入图片描述

这时 他的路径会自动变成center

在这里插入图片描述

如果想要路径不变 就要在绑定一个路由 所以一个视图可以绑定多个路由

在这里插入图片描述

代码呈现
# 一个视图可以绑定多个路由
@app.route('/mycenter')
@app.route('/center')
def center():
    return 'center'

@app.route('/mycenter')
def mycenter():
    return redirect(url_for('center')) #函数名
这时我们在访问 mycenter 路径就在也不会变了

在这里插入图片描述

上述都是通过get 来访问请求 我们也可以通过设置get post来访问

在这里插入图片描述

代码呈现
@app.route('/myorder',methods=['POST','GET'])
def order():
    return 'myorder'
当我们使用post 访问时 就要使用到postman 软件 来访问 得到我们想要的结果

在这里插入图片描述

转换器
我们在访问页面时可以携带参数 一般我们携带的是str 字符串 以下还提供了三种类型 int 整数 float 小数 path 可以放带/的路径

在这里插入图片描述

第一个运行结果

在这里插入图片描述

第二个运行结果

在这里插入图片描述

第三个运行结果

在这里插入图片描述

设置自定义转换器匹配手机号

在这里插入图片描述

# 自定义转换器 匹配手机号
from werkzeug.routing import BaseConverter
class MyConverter(BaseConverter):
    def __init__(self,map):
        super().__init__(map) # 调用父类 父类会初始化一些东西
        self.regex = r"1[3456789]\d{9}"

# 注册转化器
app.url_map.converters['rephone'] = MyConverter

@app.route("/register/<rephone:phone>")
def register(phone):
    # app.url_map 打印 所有视图的url配置
    print(app.url_map)
    print(phone)
    return '注册成功'
在上述代码中 类继承了BaseConverter方法 调用父类初始化的一些参数 然后重写正则匹配手机号 进行 转换器注册类 设置路由返回结果
这时我们要先看下源码BaseConverter在这当中初始化了两个方法 我们要继承map视图 和regex 匹配正则

在这里插入图片描述

这里的converters 也是源码中的方法 让我们看下
点击converters进入 然后选中 ctrl+f进行搜索

在这里插入图片描述

点击回车

在这里插入图片描述

再点击回车

在这里插入图片描述

我们看到这个方法被converters而接收 所以我们使用它

在这里插入图片描述

通用自定义转换器

我们先看下大神写的流程

在这里插入图片描述

上我们的代码

在这里插入图片描述

from werkzeug.routing import BaseConverter
# 通用调用自定义转换器
class MyConverter1(BaseConverter):
    def __init__(self,map,re):
        super().__init__(map) # 调用父类 父类会初始化一些东西
        self.regex = re

    def to_python(self, value):
        return value
    def to_url(self, value):
        return '12388888888'

# 注册转化器
app.url_map.converters['re'] = MyConverter1



@app.route("/myregister/<re(r'\d{11}'):uid>")
def myregister(uid):
    print(uid)
    return str(uid)

@app.route("/register/<re(r'1[3456789]\d{9}'):phone>")
def register(phone):
    return redirect(url_for("myregister",uid=phone)) # 重定向才执行 to_url
代码流程

在这里插入图片描述

按照流程发起请求

在这里插入图片描述

得到结果

在这里插入图片描述

少输一位试试 请求不到

在这里插入图片描述

Flask之模板初识
首先导入

在这里插入图片描述

代码如下

在这里插入图片描述

from flask import render_template
@app.route('/templat')
def templat():
    ctx = {
   
        "name": '老王',
        "age": 12,
        "hobby": ["下棋", '电影'],
        "test": {
   "a": 1, "b": 2}
    }

    return render_template('templat.html', **ctx) # 一定要是关键字参数 **ctx 
绘制模板 首先在templates里面创建一个 templat的html文件

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
 名字: <span>{
  { name }}</span> <br>
年龄: <span>{
  { age }}</span> <br>
取列表第一个: <span>{
  { hobby[0] }}</span><br> 代表取列表第一个 取索引
取字典a对应的值:<span>{
  { test.a }}</span><br> 代表取列表第一个 取值


</body>
</html>
呈现效果

在这里插入图片描述

标签遍历取值

在这里插入图片描述

<ul>
    {%   for r in hobby %}
        <p>{
  { r }}</p>
    {%   endfor %}
</ul>

在这里插入图片描述

查询标签索引

在这里插入图片描述

效果

在这里插入图片描述

过滤器

在这里插入图片描述

长度过滤器:
{
  { name|length }}<br>

默认过滤器,当后台没有返回sex的时候会执行:
{
  { sex|default('男') }}<br>

反转过滤器:
{
  { name|reverse }}<br>
效果

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

自定义过滤器
# 自定义过滤器

def handletime(time,*index):
    return time.strftime('%Y-%m-%d %H:%M')

def add(nums,nums1):
    return nums+5


app.jinja_env.filters['handletime'] = handletime  # 注册过滤器
app.jinja_env.filters['add'] = add

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

GET 请求
首先访问register.html 页面 提交请求 并把值传给/rese/add 返回数据
from flask import Flask, request

@app.route('/rese')  # 代表首页
def index():  # 视图函数
    return render_template('register.html')

# get请求
@app.route('/rese/add')  # 代表个人中心页
def rese():  # 视图函数
    if request.method 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值