flask的安装与使用

2023-11-04

说明

最近的项目需要用到flask,貌似3年前用过,不过很久没搞了
以前java web比较熟。这里做个简单的入门记录

官网:
http://docs.jinkan.org/docs/flask/

下载与安装

pip install flask
建议用virtualenv

一个例子

在这里插入图片描述

from flask import Flask

app = Flask(__name__)


@app.route('/')
def hello_world():
    return 'Hello World!'


if __name__ == '__main__':
    app.run()

例子2

带参数

@app.route('/user/<username>')
def show_user_profile(username):
    # show the user profile for that user
    return 'User %s' % username

@app.route('/post/<int:post_id>')
def show_post(post_id):
    # show the post with the given id, the id is an integer
    return 'Post %d' % post_id

访问:
http://127.0.0.1:5000/post/122

http://127.0.0.1:5000/user/jjjjj

一个简易登陆逻辑

三个文件 :

在这里插入图片描述
效果示意:
在这里插入图片描述

index.html

<!DOCTYPE html>
<!-- saved from url=(0022)https://i.huanqiu.com/ -->
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>
        首页
    </title>
</head>

<body>

<div class="publicHeader">
    <div class="header">
        <span class="pageTitle"><b>
            {% if uname %}
                <a href="/logout">登出</a>
            {% else %}
                 <a href="/login_page">登陆</a>
            {% endif %}

        </b></span>
    </div>

</div>

<div class="loginWarp">
    {% if uname %}
        <h1>Hello {{ uname }}!</h1>
    {% else %}
        <h1>你没有登陆,请先登陆!</h1>
    {% endif %}

</div>

<div class="publicFooter">
    <div class="footer">
    </div>
    <div class="copyright">这是首页</div>
</div>


</body>
</html>

login.html

<!DOCTYPE html>
<!-- saved from url=(0022)https://i.huanqiu.com/ -->
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>
        登录
    </title>
</head>

<body>

<div class="publicHeader">
    <div class="header">

        <span class="pageTitle"><b>
            登录
        </b></span>

        <span class="loginBar">
		</span>

    </div>

</div>

<div class="loginWarp">
    <div class="loginMain">
        <div class="login">

            <form method="post" action="/login">
                <span class="title">用户登录</span>
                <em class="loginError"></em>

                <span class="userEmail"><input type="text" name="uname" value="dgm" style="ime-mode:disabled;"
                                               placeholder="unmae"></span>

                <span class="userPassword"><input type="password" name="pwd" value="123456" placeholder="pwd"></span>

                <span class="loginBtn">
	    				<input type="submit" value="登 录" name="submit">
	    			</span>

            </form>

        </div>
    </div>

</div>


<div class="publicFooter">
    <div class="footer">
    </div>
    <div class="copyright">这是登陆页</div>
</div>


</body>
</html>

app.py

from flask import Flask, escape, request, session, redirect, url_for,render_template

app = Flask(__name__)
app.secret_key = "123456"

@app.route('/')
def hello_world():
    return redirect(url_for('index'))


@app.route('/index')
def index():
    if 'uname' in session:
        uname = session['uname']
        return render_template('index.html', uname=uname)
    else:
        return render_template('index.html')


@app.route('/login_page')
def login_page():
    return render_template('login.html')

@app.route('/logout')
def logout():
     session.clear()
     return redirect(url_for('index'))


@app.route('/login', methods=['GET', 'POST'])
def login():
    # 判空
    if (not 'uname' in  request.form) or not ( 'pwd' in  request.form):
        errmsg = "uname and pwd can not be null"
        print(errmsg)
        return errmsg

    uname = request.form['uname']
    pwd = request.form['pwd']
    # 判断 method
    if request.method == 'POST':
        print("yes,post")
    else:
        errmsg = "no,method is wrong," + request.method
        print(errmsg)
        return errmsg

    if uname == 'dgm' and pwd == '123456':
        # 放到session中
        # 这一行可能 会抛,The session is unavailable because no secret ,需要增加 app.secret_key = "123456" 这样的配置
        session['uname'] = uname
        return redirect(url_for('index'))
    else:
        return "wrong uname or pwd"



if __name__ == '__main__':
    # app.run()
    app.run(debug=True)


app.py的说明

@app.route(’/’) 进首页跳到index

@app.route(’/index’) 为首页, session中有用户则显示 用户,无用户则提示用户登陆

@app.route(’/login_page’) 进登陆界面

@app.route(’/logout’) 登出请求,把session给清空

@app.route(’/login’, methods=[‘GET’, ‘POST’]) 登陆提交,成功则进index

filter或拦截器之类

可以用
before_request,after_request

如:


@app.before_request
def print_request_info():
    print("请求地址:" + str(request.path))
    print("请求方法:" + str(request.method))
    print("---请求headers--start--")
    print(str(request.headers).rstrip())
    print("---请求headers--end----")
    print("GET参数:" + str(request.args))
    print("POST参数:" + str(request.form))

每次请求都会打印 上面的内容

把路由的内容分到多个文件

我们现在是把 route都加到了app.js,如果 业务变得很多这个内容就会很大,不好维护,所以我们需要多个文件来拆分,使用flask的 blueprint 模块

我们还是用之前的逻辑,
但尝试把 下面三个请求 扔到 auth.js中,
@app.route(’/login_page’)
@app.route(’/logout’)
@app.route(’/login’, methods=[‘GET’, ‘POST’])

[外链图片转存失败(img-25mITl06-1568452641771)(en-resource://database/3157:0)]

auth.py :

from flask import Flask, escape, request, session, redirect, url_for,render_template,Blueprint

mod = Blueprint('auth',__name__)


@mod.route('/login_page')
def login_page():
    return render_template('login.html')

@mod.route('/logout')
def logout():
     session.clear()
     return redirect(url_for('index'))

@mod.route('/login', methods=['GET', 'POST'])
def login():
    # 判空
    if (not 'uname' in  request.form) or not ( 'pwd' in  request.form):
        errmsg = "uname and pwd can not be null"
        print(errmsg)
        return errmsg

    uname = request.form['uname']
    pwd = request.form['pwd']
    # 判断 method
    if request.method == 'POST':
        print("yes,post")
    else:
        errmsg = "no,method is wrong," + request.method
        print(errmsg)
        return errmsg

    if uname == 'dgm' and pwd == '123456':
        # 放到session中
        # 这一行可能 会抛,The session is unavailable because no secret ,需要增加 app.secret_key = "123456" 这样的配置
        session['uname'] = uname
        return redirect(url_for('index'))
    else:
        return "wrong uname or pwd"

app.py 有变化:

from flask import Flask, escape, request, session, redirect, url_for,render_template
from views import auth

app = Flask(__name__)
app.secret_key = "123456"
app.register_blueprint(auth.mod,url_prefix='/')

@app.route('/')
def hello_world():
    return redirect(url_for('index'))


@app.route('/index')
def index():
    if 'uname' in session:
        uname = session['uname']
        return render_template('index.html', uname=uname)
    else:
        return render_template('index.html')

if __name__ == '__main__':
    # app.run()
    app.run(debug=True)

留意上面的 app.register_blueprint(auth.mod,url_prefix=’/’),即把其它模块的 路由加上.
其它不变.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

flask的安装与使用 的相关文章

  • Django REST序列化器:创建对象而不保存

    我已经开始使用 Django REST 框架 我想做的是使用一些 JSON 发布请求 从中创建一个 Django 模型对象 然后使用该对象而不保存它 我的 Django 模型称为 SearchRequest 我所拥有的是 api view
  • 如何在python中读取多个文件中的文本

    我的文件夹中有许多文本文件 大约有 3000 个文件 每个文件中第 193 行是唯一包含重要信息的行 我如何使用 python 将所有这些文件读入 1 个文本文件 os 模块中有一个名为 list dir 的函数 该函数返回给定目录中所有文
  • Python PAM 模块的安全问题?

    我有兴趣编写一个 PAM 模块 该模块将利用流行的 Unix 登录身份验证机制 我过去的大部分编程经验都是使用 Python 进行的 并且我正在交互的系统已经有一个 Python API 我用谷歌搜索发现pam python http pa
  • Flask_login - 当前用户

    我正在使用烧瓶登录我的烧瓶应用程序中的扩展用于登录用户 您必须知道 此扩展有一个变量 用于存储当前用户 除了测试之外 该代码运行良好 当我测试代码时 使用unittest 我注册了一个 测试用户 并登录 但是当前用户变量不保留登录的用户 这
  • Pycharm Python 控制台不打印输出

    我有一个从 Pycharm python 控制台调用的函数 但没有显示输出 In 2 def problem1 6 for i in range 1 101 2 print i end In 3 problem1 6 In 4 另一方面 像
  • DreamPie 不适用于 Python 3.2

    我最喜欢的 Python shell 是DreamPie http dreampie sourceforge net 我想将它与 Python 3 2 一起使用 我使用了 添加解释器 DreamPie 应用程序并添加了 Python 3 2
  • 导入错误:没有名为 _ssl 的模块

    带 Python 2 7 的 Ubuntu Maverick 我不知道如何解决以下导入错误 gt gt gt import ssl Traceback most recent call last File
  • 如何在Windows上模拟socket.socketpair

    标准Python函数套接字 套接字对 https docs python org 3 library socket html socket socketpair不幸的是 它在 Windows 上不可用 从 Python 3 4 1 开始 我
  • 如何使用包含代码的“asyncio.sleep()”进行单元测试?

    我在编写 asyncio sleep 包含的单元测试时遇到问题 我要等待实际的睡眠时间吗 I used freezegun到嘲笑时间 当我尝试使用普通可调用对象运行测试时 这个库非常有用 但我找不到运行包含 asyncio sleep 的测
  • 打破嵌套循环[重复]

    这个问题在这里已经有答案了 有没有比抛出异常更简单的方法来打破嵌套循环 在Perl https en wikipedia org wiki Perl 您可以为每个循环指定标签 并且至少继续一个外循环 for x in range 10 fo
  • Python tcl 未正确安装

    我刚刚为 python 安装了graphics py 但是当我尝试运行以下代码时 from graphics import def main win GraphWin My Circle 100 100 c Circle Point 50
  • python pandas 中的双端队列

    我正在使用Python的deque 实现一个简单的循环缓冲区 from collections import deque import numpy as np test sequence np array range 100 2 resha
  • HTTPS 代理不适用于 Python 的 requests 模块

    我对 Python 还很陌生 我一直在使用他们的 requests 模块作为 PHP 的 cURL 库的替代品 我的代码如下 import requests import json import os import urllib impor
  • 如何将 numpy.matrix 提高到非整数幂?

    The 运算符为numpy matrix不支持非整数幂 gt gt gt m matrix 1 0 0 5 0 5 gt gt gt m 2 5 TypeError exponent must be an integer 我想要的是 oct
  • Python:尝试检查有效的电话号码

    我正在尝试编写一个接受以下格式的电话号码的程序XXX XXX XXXX并将条目中的任何字母翻译为其相应的数字 现在我有了这个 如果启动不正确 它将允许您重新输入正确的数字 然后它会翻译输入的原始数字 我该如何解决 def main phon
  • 从 pygame 获取 numpy 数组

    我想通过 python 访问我的网络摄像头 不幸的是 由于网络摄像头的原因 openCV 无法工作 Pygame camera 使用以下代码就像魅力一样 from pygame import camera display camera in
  • Nuitka 未使用 nuitka --recurse-all hello.py [错误] 编译 exe

    我正在尝试通过 nuitka 创建一个简单的 exe 这样我就可以在我的笔记本电脑上运行它 而无需安装 Python 我在 Windows 10 上并使用 Anaconda Python 3 我输入 nuitka recurse all h
  • 对输入求 Keras 模型的导数返回全零

    所以我有一个 Keras 模型 我想将模型的梯度应用于其输入 这就是我所做的 import tensorflow as tf from keras models import Sequential from keras layers imp
  • 在python中,如何仅搜索所选子字符串之前的一个单词

    给定文本文件中的长行列表 我只想返回紧邻其前面的子字符串 例如单词狗 描述狗的单词 例如 假设有这些行包含狗 hotdog big dog is dogged dog spy with my dog brown dogs 在这种情况下 期望
  • 在 Python 类中动态定义实例字段

    我是 Python 新手 主要从事 Java 编程 我目前正在思考Python中的类是如何实例化的 我明白那个 init 就像Java中的构造函数 然而 有时 python 类没有 init 方法 在这种情况下我假设有一个默认构造函数 就像

随机推荐

  • excel 多项式拟合数据

    有如下一组数据和其对应的曲线波形 如何快速得到其数据函数表达式 x y 996 1250 1988 2250 3000 3550 4000 4900 要得到原始的函数表达式是比较难的 不过我们可以用多项目拟合方式来拟合近似的多项式 对于一些
  • ReactNative Image组件详解

    源码传送门 最近学习ReactNative感觉到挺有意思的 在学习的过程中 发现网上一些人写的文章内容过时了 这主要是ReactNative的版本升级太快 如果你现在看一篇16甚至15年写的文章 把知识点和官方文档对比下 会让你大跌眼镜 所
  • pulseaudio中,./bin/pulseaudio --system -vvvvvvvvvv的作用

    bin pulseaudio system vvvvvvvvvv这个命令用于启动 PulseAudio 其中 system 参数表示以系统级别运行 PulseAudio 这个命令会涉及 PulseAudio 的相关配置和运行过程 但是 从h
  • 阿特拉斯拧紧枪说明书_Atlas拧紧轴

    QST34 8CT T50 L150 H68435 6100 10 QST34 20CT T50 L150 H108435 6110 10 QST42 20CT T50 L134 H10 8435 6120 10 QST42 20COT T
  • C语言简介

    1 来历 C语言的原型是A语言 然后经过数次改进 简化 形成C语言 其出现原因是为了使编程更简单 更容易实现 2 动机 由A语言数次改编 为了更适应编译 3 故事 C语言的前身B语言 Ken Thompson用它写了第一个unix操作系统
  • c语言指针(深入了解指针)

    前沿 有人曾说过不会指针等于没有学习c语言 而我也是非常认同这个观点的 要想学习好c语言 指针是比不可缺少的 如果指针学不会c语言也就没办法学好 而向如此越重要的东西越比较难学 但难学并不代表学不会 这片文章将由简单到复杂让你深刻的了解指针
  • 【MATLAB】设置figure默认背景颜色:白色

    设置figure背景颜色 matlab的图形窗口默认背景为灰色 可以采用以下任一命令改变背景颜色 figure color w 或者figure color 1 1 1 或者set gcf color w 这样每次都需要额外执行命令 很麻烦
  • 解决在WebStorm中使用Vue组件的v-xxx等指令报错

    错误如下 这个报错并不会影响代码执行 强迫症不行 解决方法 点击File gt Settings gt 直接搜索 Unbound XML namespace prefix 直接把后面的勾去掉 保存即可 保存后如下 错误消失
  • Linux学习笔记(2) --- 标准目录结构

    Linux 标准目录结构 root 启动Linux时使用的一些核心文件 如操作系统内核 引导程序Grub等 home 存储普通用户的个人文件 ftp 用户所有服务 httpd samba user1 user2 bin 系统启动时需要的执行
  • [J2EE-07]XML建模

    1 回顾 1 XML的作用 配置 xml properties ini yaml 数据交互 XML webservice axis2 JSON ajax无刷新 2 配置位置和读取Properties配置文件 如何读取Properties配置
  • 导入别人的Android项目

    1 修改项目目录下的 build gradle 文件 将其中的 classpath com android tools build gradle x x x 中的x x x更改为Android Studio安装目录下的 User gradl
  • 【MOS管】

    文章目录 一 极性判断 二 N沟道和P沟道判断 三 寄生二极管 四 MOS管的作用 1 MOS管用作开关时在电路中的连接方法 2 反证法 五 MOS管的开关条件 六 相关概念 1 BJT 2 FET 七 MOS管的识别 一 从MOS管实物识
  • QT+opencv3打包发布程序

    1 以release方式调试程序 然后会在项目文件夹的x64 release下会有一个exe文件 把exe文件复制包自己想保存的文件夹 2 打开QT5 8程序的命令行 输入 cd d D xxx 这句话的意思是 打开d盘下的XXX文件夹 可
  • 6D pose estimation 之 EfficientPose

    github https github com ybkscht EfficientPose 新出的多目标6D姿态估计算法EfficientPose 看论文在多目标检测效果确实要比之前的算法要好 按github上走基本上可以跑通作者预训练的模
  • Maven仓库的配置

    目录 引言 一 准备工作 编辑二 环境变量的设置 二 maven仓库的设置 1 本地仓库设置 2 配置阿里云提供的镜像仓库 3 配置maven仓库的基础jdk版本 三 maven仓库在IDEA中的配置 引言 Maven 是 Apache 软
  • 单片机c51中断 — 中断嵌套实例IE0的置位和撤销

    项目文件 文件 关于项目的内容知识点可以见专栏单片机原理及应用 的第五章 中断 根据下原理图 编程验证二级外部中断嵌套效果 其中K0定为低优先级中断源 K1为高优先级中断源 此外 利用发光二极管D1验证外部中断请求标志IE0在脉冲触发中断时
  • Javascript基础介绍与arguments对象,console对象,json对象详述

    Javascript基础 Javascript基础 前言介绍与引用 基础语法 基础逻辑控制语句 数据类型 对象 属性与方法的区别 数组 函数 典例 setTimeout 函数声明 构建 作用域 类型转换 温习对象概念 arguments 隐
  • 2022-2027年中国重工行业市场全景评估及发展战略规划报告

    报告格式 电子版 纸介版 出品单位 华经产业研究院 本报告由华经产业研究院出品 对中国重工行业的发展现状 竞争格局及市场供需形势进行了具体分析 并从行业的政策环境 经济环境 社会环境及技术环境等方面分析行业面临的机遇及挑战 还重点分析了重点
  • 【文献阅读】数据重采样+特征选择(1)

    目录 1 面向不均衡数据的多分类集成算法 1 1 两阶段采样 1 2 算法整体框架 1 3 实验 1 4 期刊 2 基于多阶段混合集成的中小企业信用风险评价 3 基于边界自适应SMOTE和FocalLoss函数改进LightGBM的信用风险
  • flask的安装与使用

    说明 最近的项目需要用到flask 貌似3年前用过 不过很久没搞了 以前java web比较熟 这里做个简单的入门记录 官网 http docs jinkan org docs flask 下载与安装 pip install flask 建