写在前面

今天状态很不好,我发现学这部分知识的时候,会出现溜号或者注意力无法集中的情况。

我能想到的是,大概率是这部分知识,应该是超出了我现在的水平了,也就是说我存在知识断层了,整体感觉真的是一知半解。

那有同学会问了,那你能说明白吗?

我理解的肯定能呀,来往下看!

Flask的使用

1、消息闪现的使用

这块只能算是明白了大概,并没有算是真正的理解,待后续写多了,我再回来补充(当时感觉还是spring boot好),还是老规矩上代码。

模版文件index.html,示例代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>index </title>
</head>
<body>
{% with messages = get_flashed_messages() %}
{% if messages %}
{% for message in messages %}
{{ message }}
{% endfor %}
{% endif %}
{% endwith %}
<h3>Welcome!</h3>
<a href = "{{ url_for('login') }}">login</a>
</body>
</html>

模版文件login_demo.html,示例代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>login demo</title>
</head>
<body>
<form action="http://localhost:8888/login" method="post">
username:<input type="text" name="username"><br>
password:<input type="password" name="password"><br>
<input type="submit" value="login"><br>
</form>
{% if error %}
<p><strong>Error: </strong> {{ error }}</p>
{% endif %}
</body>
</html>

逻辑部分,示例代码如下:

from flask import Flask, request, url_for, redirect, render_template, flash

app = Flask(__name__)

@app.route('/')
def index():
return render_template('index.html') @app.route('/login', methods=['POST', 'GET'])
def login():
error = None
if request.method == 'POST':
if request.form['username'] == 'admin' and request.form['password'] == 'admin':
flash('登录成功!')
return redirect(url_for('index'))
else:
error = 'login failed'
return render_template('login_demo.html', error=error) if __name__ == '__main__':
app.run(host='0.0.0.0', port=8888, debug=False)

效果:

知识点:

  • 可以理解为闪现消息是向用户反馈信息,更好的诠释了交互的重要性,即我操作后,马上会给我反馈信息,当且仅当仅在下一次请求时访问它,便会与布局模板结合展示消息。
  • flash(message, category):message 是要闪现的实际消息,category 可选。它可以是“error”,“info”或“warning”。
  • get_flashed_messages(with_categories, category_filter):两个参数都是可选参数。如果接收到的消息具有类别,则第一个参数是元组。第二个参数仅用于显示特定消息。
  • {% if error %}{% 这里写代码 %},用这个包裹
  • {{ message }}: {{ 变量 }},插值表达式和Jmeter类似用于取值

2、使用Flask 发送邮件

安装依赖:

pip install Flask-Mail

没啥可说的,就是发送邮件功能,这里我用qq邮箱为例,示例代码如下:

from flask import Flask
from flask_mail import Mail, Message app = Flask(__name__) app.config['MAIL_SERVER'] = 'smtp.qq.com'
app.config['MAIL_PORT'] = 465
app.config['MAIL_USERNAME'] = 'your@qq.com'
app.config['MAIL_PASSWORD'] = '你生成的授权码'
app.config['MAIL_USE_TLS'] = False
app.config['MAIL_USE_SSL'] = True
mail = Mail(app) @app.route("/")
def index():
msg = Message('Hello', sender='your@qq.com', recipients=['接收人邮箱'])
msg.body = "Hello Flask message sent from Flask-Mail"
mail.send(msg)
return "Sent Success!" if __name__ == '__main__':
app.run(host='0.0.0.0', port=8888, debug=False)

效果:

知识点:

1、mail = Mail(app):构造函数

2、Mail类的方法:

  • send(): 发送Message类对象的内容
  • connect(): 建立与邮件主机连接
  • send_message(): 发送消息对象

3、Message类方法

attach() - 为邮件添加附件。此方法采用以下参数:

  • filename - 要附加的文件的名称
  • content_type - MIME类型的文件
  • data - 原始文件数据
  • 处置 - 内容处置(如果有的话)。

add_recipient() - 向邮件添加另一个收件人

3、Flask WTF的使用

安装依赖

pip install flask-WTF

举个栗子

主要用于表单的处理验证,先上模版loginForm.html代码,如下:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>login Form Demo</title>
</head>
<body>
{#这里将用来展示渲染的数据模版#}
<form method="post">
{{ form.username.label }} {{ form.username }} <br>
{{ form.password.label }} {{ form.password }} <br>
{{ form.address.label }} {{ form.address }} <br>
{{ form.email.label }} {{ form.email }} <br>
{{ form.remember.label }} {{ form.remember }} <br>
{{ form.submit}} <br>
</form>
</body>
</html>

表单参数loginForm.py示例代码如下:

# -*- coding: utf-8 -*-
# @Time : 2023/11/19 16:40
# @Author : longrong.lang
# @FileName: loginForm.py
# @Software: PyCharm
# @Cnblogs :https://www.cnblogs.com/longronglang
# @Motto:你只管努力,剩下的交给天意.
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField, BooleanField, TextAreaField, EmailField
from wtforms.validators import DataRequired, Length class LoginForm(FlaskForm):
username = StringField('用户名:', validators=[DataRequired('请输入用户名')])
password = PasswordField('密码:', validators=[DataRequired('请输入密码')])
address = TextAreaField('地址:')
email = EmailField('邮箱:',validators=[Length(10,50)])
remember = BooleanField('记住我')
submit = SubmitField('提交')

逻辑代码示例,如下:

from flask import Flask, flash, render_template, request

from flask_case.loginForm import LoginForm

app = Flask(__name__)

app.secret_key = 'secret_key'

@app.route('/login', methods=['GET', 'POST'])
def login():
login_form = LoginForm()
username = request.form.get("username")
password = request.form.get("password")
# 验证表单
if username == 'admin' and password == 'admin':
return "login success"
else:
flash("参数有误或者不完整")
return render_template('loginForm.html', form=login_form)
return render_template('loginForm.html', form=login_form) if __name__ == '__main__':
app.run(host='0.0.0.0', port=8888, debug=False)

效果:

知识点:

1、 CSRF 校验处理的两种方式:

app.config['WTF_CSRF_ENABLED'] = False #直接关闭
app.secret_key = 'secret_key' #直接加上

自动创建CSRF令牌的隐藏字段。这是为了防止Cross Site Request Forgery(跨站请求伪造)攻击,所以加上!

2、WTforms表单字段含义:

  • TextField :表示<input type ='text'> HTML表单元素
  • BooleanField:表示<input type ='checkbox'> HTML表单元素
  • DecimalField:用于显示带小数的数字的文本字段
  • IntegerField:用于显示整数的文本字段
  • RadioField:表示<input type = 'radio'> HTML表单元素
  • SelectField:表示选择表单元素
  • TextAreaField:表示<textarea> HTML表单元素
  • PasswordField:表示<input type = 'password'> HTML表单元素
  • SubmitField:表示<input type = 'submit'>表单元素

3、validators: 常用验证的使用:

  • DataRequired:检查输入字段是否为空
  • Email:检查字段中的文本是否遵循电子邮件ID约定
  • IPAddress:在输入字段中验证IP地址
  • Length:验证输入字段中的字符串的长度是否在给定范围内
  • NumberRange:验证给定范围内输入字段中的数字
  • URL:验证在输入字段中输入的URL

写在最后

整个学习过程大约4个小时(也许是消化了),好像突然悟了,能根据理解写出来,但是感觉还是欠一些火候的,个人感觉还是练得少。

值得一提的是,学习这东西,真的就是一种感觉,进入“心流”吧。

看过黑子的篮球的同学应该知道Zone吧,就是那种随心所欲的感觉。

怎么说呢,就是在拉伸区的效果最好,舒适区是无用功,所以找到自己的拉伸区就显得格外重要了。

有些同学会问,那什么是拉伸区,就是舒适区边缘。

那怎么找呀?等我掌握方法的,我会写出来!

我是六哥,觉得文章好,请给我个赞呗!

大白话说Python+Flask入门(三)的更多相关文章

  1. 3.Python爬虫入门三之Urllib和Urllib2库的基本使用

    1.分分钟扒一个网页下来 怎样扒网页呢?其实就是根据URL来获取它的网页信息,虽然我们在浏览器中看到的是一幅幅优美的画面,但是其实是由浏览器解释才呈现出来的,实质它是一段HTML代码,加 JS.CSS ...

  2. 转 Python爬虫入门三之Urllib库的基本使用

    静觅 » Python爬虫入门三之Urllib库的基本使用 1.分分钟扒一个网页下来 怎样扒网页呢?其实就是根据URL来获取它的网页信息,虽然我们在浏览器中看到的是一幅幅优美的画面,但是其实是由浏览器 ...

  3. RobotFramework + Python 自动化入门 三 (Web自动化)

    在<RobotFramwork + Python 自动化入门 一>中,完成了一个Robot环境搭建及测试脚本的创建和执行. 在<RobotFramwork + Python 自动化入 ...

  4. python flask 入门

    1.入门案例.本质上还是一个socket from flask import Flask,request #### app=Flask(__name__) app.debug=True ####配置路 ...

  5. python爬虫入门三:requests库

    urllib库在很多时候都比较繁琐,比如处理Cookies.因此,我们选择学习另一个更为简单易用的HTTP库:Requests. requests官方文档 1. 什么是Requests Request ...

  6. Python爬虫入门三之Urllib库的基本使用

    转自http://cuiqingcai.com/947.html 1.分分钟扒一个网页下来 怎样扒网页呢?其实就是根据URL来获取它的网页信息,虽然我们在浏览器中看到的是一幅幅优美的画面,但是其实是由 ...

  7. Python爬虫入门之Urllib库的基本使用

    那么接下来,小伙伴们就一起和我真正迈向我们的爬虫之路吧. 1.分分钟扒一个网页下来 怎样扒网页呢?其实就是根据URL来获取它的网页信息,虽然我们在浏览器中看到的是一幅幅优美的画面,但是其实是由浏览器解 ...

  8. RobotFramework + Python 自动化入门 四 (Web进阶)

    在<RobotFramwork + Python 自动化入门 一>中,完成了一个Robot环境搭建及测试脚本的创建和执行. 在<RobotFramwork + Python 自动化入 ...

  9. 大白话说Java反射:入门、使用、原理

    文章首发于[博客园-陈树义],点击跳转到原文<大白话说Java反射:入门.进阶.原理> 反射之中包含了一个「反」字,所以想要解释反射就必须先从「正」开始解释. 一般情况下,我们使用某个类时 ...

  10. Python Flask Web 框架入门

    Python Flask 目录 本文主要借鉴 letiantian 的文章 http://www.letiantian.me/learn-flask/ 一.简介 二.安装 三.初始化Flask 四.获 ...

随机推荐

  1. 但因热爱,愿迎万难,OpenTiny 社区增加一枚前端程序媛贡献者🎉

    我们非常高兴地宣布,OpenTiny Vue Playground 正式上线! 链接:https://opentiny.github.io/tiny-vue-playground/ 在此非常感谢 xi ...

  2. PB从入坑到放弃(六)动态SQL应用

    写在前面 动态 SQL 语句是部分或者整个 SQL 语句在运行时才能确定,可以更好的与用户进行交互,大大提高了SQL的灵活性 一.执行SQL语句 1.1 执行无入参SQL ① 语法 EXECUTE I ...

  3. 在原生APP中集成Unity容器

    随着技术的发展,越来越多的APP期望拥有3D,AR的能力.要达到这个目标可以选择使用原生开发,也可以使用Unity成熟的3D开发技术链,通过嵌入的方式将Unity容器嵌入到APP中.这里介绍的是通过嵌 ...

  4. shopee根据ID取商品详情 API

    ​ item_get-根据ID取商品详情  注册开通 shopee.item_get 公共参数 名称 类型 必须 描述 key String 是 调用key(必须以GET方式拼接在URL中) secr ...

  5. 拉普拉斯金字塔在多图HDR算法中的应用以及多曝光图像的融合算法简介。

    在SSE图像算法优化系列二十九:基础的拉普拉斯金字塔融合用于改善图像增强中易出现的过增强问题(一) 一文中我们曾经描述过基于几种高频融合法则的拉普拉斯金字塔融合算法,那里是主要针对2副图像的.实际的应 ...

  6. 2023年Vue开发中的8个最佳工具

    前言 Vue.js,一款当今非常流行的基于JavaScript的开源框架,旨在构建动态的可交互应用. Vue.js以其直观的语法和灵活的架构而广受全球开发者的欢迎和赞誉.随着时间的推移,Vue不断进化 ...

  7. containerd镜像拉取配置

    背景: 公司要求部署最一套新版的k8s系统来部署生产应用,说实话很头疼.因为k8s自1.23版本之后就用不docker作为容器的默认运行时了,而是采用的containerd,这就带来了一系列的问题.没 ...

  8. C++类内存分布+ Studio工具

    书上类继承相关章节到这里就结束了,这里不妨说下C++内存分布结构,我们来看看编译器是怎么处理类成员内存分布的,特别是在继承.虚函数存在的情况下. 工欲善其事,必先利其器,我们先用好Visual Stu ...

  9. WebKit Inside: CSS 样式表的匹配时机

    WebKit Inside: CSS 的解析 介绍了 CSS 样式表的解析过程,这篇文章继续介绍 CSS 的匹配时机. 无外部样式表 内部样式表和行内样式表本身就在 HTML 里面,解析 HTML 标 ...

  10. Django框架项目之课程主页——课程页页面、课程表分析、课程表数据、课程页面、课程接口、前台、后台

    文章目录 1-课程页页面 课程组件 2 课程主页之课程表分析 课程表分析 免费课案例 创建models:course/models.py 注册models:course/adminx.py 数据库迁移 ...