IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> flask学习笔记 -> 正文阅读

[Python知识库]flask学习笔记


入门

创建一个flask项目

使用pycharm在这里插入图片描述

  • template 放置html页面
  • static 放置静态资源

Jinja

flask项目内默认配置Jinja库

渲染模板

# app.py
from flask import Flask, render_template

@app.route('/')
def index():
 	return render_template('index.html')
@app.route('/user/<name>')
def user(name):
 	return render_template('user.html', name=name)
# user.html
<h1>Hello, {{ name }}!</h1>

模板继承

创建base.html

<html>
<head>
 {% block head %}
 <title>{% block title %}{% endblock %} - My Application</title>
 {% endblock %}
</head>
<body>
 {% block body %}
 {% endblock %}
</body>
</html>

创建index.html

{% extends "base.html" %}
{% block title %}Index{% endblock %}
{% block body %}
<h1>Hello, World!</h1>
{% endblock %}

基础语法

{{}}包裹变量
{% %}包裹语句

路由

重定向

redirect‘index.html’)

url构建

url_for('index')

404

return render_template('page_not_found.html'), 404

基础

Bootstrap

在flask中使用flask_bootstrap

  1. 在app.py添加bootstrap=flask_bootstrap.Bootstrap(app)
  2. 在html顶部添加{%extends ‘bootstrap/base,html’%}

WTForms

#forms.py
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField, validators, PasswordField,EmailField
from wtforms.validators import data_required, Email, Regexp


class NameForm(FlaskForm):
    name = StringField("请输入你的姓名: ",[validators.Length(min=3)])
    password = PasswordField('密码', [
        validators.DataRequired(message="密码未输入"),
    ])
    confirm = PasswordField('确认密码',[validators.EqualTo('password', message='两次密码不一致')])
    # email = EmailField("邮箱", [validators.Email(message="邮箱格式不正确")])
    email = StringField("邮箱",[validators.Regexp(r'/^.*\.com$/',message="邮箱格式不正确")])
    submit = SubmitField('提交')

<!-- html -->
{{ wtf.quick_form(form) }}
# wtf表单必须用秘钥
app.config["SECRET_KEY"] = "hello"
form = forms.NameForm();
	#点击了提交按钮
    if form.validate_on_submit():

消息闪现

<!-- html -->
{% with messages = get_flashed_messages() %}
  {% if messages %}
    <ul class=flashes>
    {% for message in messages %}
      <li>{{ message }}</li>
    {% endfor %}
    </ul>
  {% endif %}
{% endwith %}
{% block body %}{% endblock %}
flash('xxxxxx')

SQLAlchemy

配置

#config.py
basedir = os.path.abspath(os.path.dirname(__file__))
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] =\
 'sqlite:///' + os.path.join(basedir, 'data.sqlite')
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)

常用语法

  1. db.create_all() 将寻找所有db.Model 的子类,然后在数据库中创建对应的表
  2. db.drop_all() 删除所有表
  3. db.session.add()参数是一个class(db.Model)的对象 增加或修改
  4. db.session.commit()提交到数据库
  5. db.session.delete()删除
  6. Role.query.all()查询
  7. Role.query.filter_by(role=user_role)有限制条件的查询,只支持=
  8. Role.query.filter(Role.name==user_role.name)支持>==<

在这里插入图片描述

启动shell

在Terminal终端输入

flask shell

flask-mail

#app.py
from flask import Flask
from flask_mail import Message,Mail
app = Flask(__name__)
app.config.update(
    MAIL_SERVER='smtp.qq.com',
    MAIL_USE_SSL=True,
    # 25/465 普通/加密
    MAIL_PORT=465,
    MAIL_USERNAME='9@qq.com',
    MAIL_PASSWORD='在qq邮箱获取验证码',

)
mail = Mail(app)

@app.route('/')
def hello_world():  # put application's code here
    msg = Message('title is hello',
                  sender='9@qq.com',
                  recipients=['9@qq.com']
                  )
    # body为txt格式 / html   两作用相同
    msg.body = 'testing'
    # msg.html = '<div><h1>how are you</h1></div>'
    mail.send(msg)
    return 'Hello World!'


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

Blueprint

当路由非常多的时候,可以使用蓝图管理。 Blueprint是flask内置的一个功能。

#app.py
from user import bp as user_page
app.register_blueprint(user_page)
#user.py
from flask import Blueprint, render_template, request, flash

bp = Blueprint('user', __name__, url_prefix='/user')


@bp.route('/', methods=['GET', 'POST'])
def index():
    print(request)
    if request.method == 'POST':
        flash('添加成功')
    return render_template("user.html")


@bp.route('/add')
def add():
    return render_template('add.html')

配置虚拟变量

当一些配置比如密码、秘钥等不适合在程序里,应当从虚拟环境中配置读取。

(venv) $ set PASSWORD=‘abcdefg’

app.config['SECRET_KEY']=os.getenv('PASSWORD')
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-10-22 21:11:19  更:2022-10-22 21:14:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 7:16:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码