flask-11蓝图blueprint
目录
4、修改apps下__init__创建一个flask得app函数
2、user下新建resgister.html show.html login.html
1、templates/user下新增update.html
Flask 使用了 蓝图 的概念在一个应用或者跨应用中构建应用组件以及支持通用模式。 蓝图很好地简化了大型应用工作的方式,并提供给 Flask 扩展在应用上注册操作的核心方法。 一个 Blueprint
对象与 Flask
应用对象的工作方式很像,但它确实不是一个应用, 而是一个描述如何构建或扩展应用的 蓝图 。
一、为什么用蓝图?
Flask中的蓝图旨在针对这些情况:
- 把一个应用分解成一系列的蓝图。对于大型的应用是理想化的;一个项目能实例化一个应用, 初始化一些扩展,以及注册一系列的蓝图。
- 以一个 URL 前缀和/或子域在一个应用上注册蓝图。 URL 前缀/子域名中的参数即成为这个蓝图下的所有视图函数的共同的视图参数(默认情况下)。
- 在一个应用中用不同的 URL 规则多次注册一个蓝图。
- 通过蓝图提供模板过滤器、静态文件、模板和其它功能。一个蓝图不一定要实现应用或视图函数。
- 初始化一个 Flask 扩展时,在这些情况中注册蓝图。
Flask 中的蓝图不是即插应用,因为它实际上并不是一个应用 – 它是可以注册,甚至可以多次注册到应用上的操作集合。为什么不使用多个应用对象?你可以做到那样 (见 应用调度 ),但是你的应用会有分开的配置,并在 WSGI 层管理。
蓝图作为 Flask 层提供分割的替代,共享应用配置,并且可以更改所注册的应用对象。其短板是你不能在应用创建后撤销注册一个蓝图而不销毁整个应用对象。
二、蓝图的概念
蓝图的基本设想是它们记录注册到一个应用时的操作执行情况。 当从一个端点到另一端分发请求和生成 URL 时,Flask 关联视图函数和蓝图。
三、简单示例
1、新增apps包
2、apps下新增包user、order、goods
3、在包user下创建view.py
-
from flask import Blueprint
-
-
user_bp = Blueprint('user', __name__)
-
-
-
-
def user_center():
-
return '用户中心'
-
-
-
-
def register():
-
return '用户注册'
-
-
-
-
def login():
-
return '用户登录'
-
-
-
-
def logout():
-
return '用户退出'
4、修改apps下__init__创建一个flask得app函数
-
from flask import Flask
-
import settings
-
from apps.user.view import user_bp
-
-
-
def create_app():
-
app = Flask(__name__)
-
# 加载配置
-
app.config.from_object(settings)
-
# 蓝图 ,将蓝图对象绑定到app上
-
app.register_blueprint(user_bp)
-
print(app.url_map)
-
return app
-
-
-
if __name__ == '__main__':
-
app = create_app()
-
app.run()
5、改造app.py
-
from flask import Flask
-
-
from apps import create_app
-
-
app = create_app()
-
-
if __name__ == '__main__':
-
app.run()
6、启动服务
一个简单示例完成
四、改造简单示例
1、templates下新建user文件夹
2、user下新建resgister.html show.html login.html
3、templates下新建base.html
-
<!DOCTYPE html>
-
<html lang="en">
-
<head>
-
<meta charset="UTF-8">
-
<title>
-
{% block title %} 父模板的title{% endblock %}
-
</title>
-
<style>
-
#head{
-
height: 50px;
-
background-color: bisque;
-
}
-
-
#head ul{
-
list-style: none;
-
height: 50px;
-
}
-
#head ul li{
-
float: left;
-
width: 100px;
-
text-align: center;
-
font-size: 15px;
-
line-height: 50px;
-
}
-
-
#middle{
-
height: 100%;
-
background-color: azure;
-
}
-
#foot{
-
height: 50px;
-
line-height: 50px;
-
background-color: darkolivegreen;
-
}
-
</style>
-
{% block modle_style %}{% endblock %}
-
-
</head>
-
<body>
-
<div id="head">
-
<ul>
-
<li><a href="">首页</a></li>
-
<li><a href="">秒杀</a><</li>
-
<li><a href="">超市</a><</li>
-
<li><a href="">图书</a><</li>
-
<li><a href="">会员</a><</li>
-
-
</ul>
-
</div>
-
-
<div id="middle">
-
{% block middle %} 中间{% endblock %}
-
</div>
-
<div id="foot">
-
我是底部
-
</div>
-
{% block myjs %}{% endblock %}
-
</body>
-
</html>
4、编写register.html继承base.html
-
{% extends 'base.html' %}
-
{% block title %}
-
用户注册
-
{% endblock %}
-
{% block middle %}
-
<p style="color: red">{{ msg }}</p>
-
<!--<form action="/register" method="post"> -->
-
<form action="{{url_for('user.register')}}" method="post">
-
<p><input type="text" name="username" placeholder="用户名"></p>
-
<p><input type="password" name="password" placeholder="密码"></p>
-
<p><input type="password" name="repassword" placeholder="确认密码"></p>
-
<p><input type="number" name="phone" placeholder="手机号码"></p>
-
<p><input type="submit" value="用户注册"></p>
-
</form>
-
{% endblock %}
5、修改user下得view.py
-
#!/usr/bin/env python
-
# -*- coding: utf-8 -*-
-
# @Time : 2021/12/14 14:25
-
# @Author : niubobo
-
# @File : view.py
-
# @Software: PyCharm
-
from flask import Blueprint, request, render_template, redirect
-
-
from apps.user.model import User
-
-
user_bp = Blueprint('user', __name__)
-
# 初始化一个列表保存注册用户信息
-
users = []
-
-
-
@user_bp.route('/')
-
def user_center():
-
return render_template('user/show.html', users=users)
-
-
-
@user_bp.route('/register', methods=['GET', 'POST'])
-
def register():
-
if request.method == 'POST':
-
# 获取post提交得数据
-
username = request.form.get('username')
-
password = request.form.get('password')
-
repassword = request.form.get('repassword')
-
phone = request.form.get('phone')
-
if password == repassword:
-
# 用户唯一
-
for user in users:
-
if user.username == username:
-
return render_template('user/register.html', msg = '用户名已存在')
-
# 创建用户对象
-
user = User(username, password, phone)
-
# 添加到用户列表
-
users.append(user)
-
return redirect('/')
-
return render_template('user/register.html')
-
# return '用户注册'
-
-
-
@user_bp.route('/login', methods=['GET', 'POST'])
-
def login():
-
return '用户登录'
-
-
-
@user_bp.route('/logout', methods=['GET', 'POST'])
-
def logout():
-
return '用户退出'
6、修改user下show.html
-
{% extends 'base.html' %}
-
{% block title %}
-
用户信息
-
{% endblock %}
-
{% block middle %}
-
<h1>用户信息</h1>
-
<span>当前用户人数:{{ users|length }}人</span>
-
<table border="1" cellspacing="0" width="60%">
-
{% for user in users %}
-
<tr>
-
<td>{{ loop.index }}</td>
-
<td>{{ user.username }}</td>
-
<td>{{ user.password }}</td>
-
<td>{{ user.phone }}</td>
-
<td><a href="">修改</a> <a href="">删除</a></td>
-
</tr>
-
{% endfor %}
-
-
</table>
-
{% endblock %}
7、修改初始化加载模板路径apps下得__init__
-
#!/usr/bin/env python
-
# -*- coding: utf-8 -*-
-
# @Time : 2021/12/11 13:52
-
# @Author : niubobo
-
# @File : __init__.py.py
-
# @Software: PyCharm
-
from flask import Flask
-
import settings
-
from apps.user.view import user_bp
-
-
-
def create_app():
-
app = Flask(__name__, template_folder='../templates', static_folder='../static')
-
# 加载配置
-
app.config.from_object(settings)
-
# 蓝图 ,将蓝图对象绑定到app上
-
app.register_blueprint(user_bp)
-
print(app.url_map)
-
return app
-
-
-
if __name__ == '__main__':
-
app = create_app()
-
app.run()
8、启动服务
输入正确内容点击【用户注册】
验证用户名重复
五、实现删除
1、改造user下得view.py新增删除路由
-
#!/usr/bin/env python
-
# -*- coding: utf-8 -*-
-
# @Time : 2021/12/14 14:25
-
# @Author : niubobo
-
# @File : view.py
-
# @Software: PyCharm
-
from flask import Blueprint, request, render_template, redirect
-
-
from apps.user.model import User
-
-
user_bp = Blueprint('user', __name__)
-
# 初始化一个列表保存注册用户信息
-
users = []
-
-
-
@user_bp.route('/')
-
def user_center():
-
return render_template('user/show.html', users=users)
-
-
-
@user_bp.route('/register', methods=['GET', 'POST'])
-
def register():
-
if request.method == 'POST':
-
# 获取post提交得数据
-
username = request.form.get('username')
-
password = request.form.get('password')
-
repassword = request.form.get('repassword')
-
phone = request.form.get('phone')
-
if password == repassword:
-
# 用户唯一
-
for user in users:
-
if user.username == username:
-
return render_template('user/register.html', msg='用户名已存在')
-
# 创建用户对象
-
user = User(username, password, phone)
-
# 添加到用户列表
-
users.append(user)
-
return redirect('/')
-
return render_template('user/register.html')
-
# return '用户注册'
-
-
-
@user_bp.route('/login', methods=['GET', 'POST'])
-
def login():
-
return '用户登录'
-
-
-
@user_bp.route('/del')
-
def del_user():
-
# 获取传递得username
-
username = request.args.get('username')
-
print(username)
-
print(users)
-
# 根据username找到列表users当中得user对象
-
for user in users:
-
if user.username == username:
-
# 删除用户
-
users.remove(user)
-
return redirect('/')
-
else:
-
return '删除失败'
-
-
-
@user_bp.route('/logout', methods=['GET', 'POST'])
-
def logout():
-
return '用户退出'
-
-
2、修改show.html
-
{% extends 'base.html' %}
-
{% block title %}
-
用户信息
-
{% endblock %}
-
{% block middle %}
-
<h1>用户信息</h1>
-
<span>当前用户人数:{{ users|length }}人</span>
-
<table border="1" cellspacing="0" width="60%">
-
{% for user in users %}
-
<tr>
-
<td>{{ loop.index }}</td>
-
<td>{{ user.username }}</td>
-
<td>{{ user.password }}</td>
-
<td>{{ user.phone }}</td>
-
<td><a href="">修改</a> <a href="javascript:;" onclick="del('{{ user.username }}')">删除</a></td>
-
</tr>
-
{% endfor %}
-
-
</table>
-
{% endblock %}
-
{% block myjs %}
-
<script>
-
function del(username) {
-
// console.log(username)
-
// location 地址栏对象
-
location.href = '/del?username=' username
-
}
-
</script>
-
{% endblock %}
3、启动服务注册用户进行删除
六、实现更新
1、templates/user下新增update.html
-
{% extends 'base.html' %}
-
{% block title %}用户更新{% endblock %}
-
{% block middle %}
-
<form action="{{ url_for('user.update_user') }}" method="post">
-
<p><input type="hidden" name="realname" value="{{ user.username }}"></p>
-
<p><input type="text" name="username" placeholder="用户名" value="{{ user.username }}"></p>
-
<p><input type="password" name="password" placeholder="密码" value="{{ user.password }}" disabled></p>
-
<p><input type="number" name="phone" placeholder="手机号码" value="{{ user.phone }}"></p>
-
<p><input type="submit" value="用户更新"></p>
-
</form>
-
{% endblock %}
2、修改templates/user下show.html
-
{% extends 'base.html' %}
-
{% block title %}
-
用户信息
-
{% endblock %}
-
{% block middle %}
-
<h1>用户信息</h1>
-
<span>当前用户人数:{{ users|length }}人</span>
-
<table border="1" cellspacing="0" width="60%">
-
{% for user in users %}
-
<tr>
-
<td>{{ loop.index }}</td>
-
<td>{{ user.username }}</td>
-
<td>{{ user.password }}</td>
-
<td>{{ user.phone }}</td>
-
<td><a href="javascript:;" onclick="update('{{ user.username }}')">修改</a>
-
<a href="javascript:;" onclick="del('{{ user.username }}')">删除</a></td>
-
</tr>
-
{% endfor %}
-
-
</table>
-
{% endblock %}
-
{% block myjs %}
-
<script>
-
//删除函数
-
function del(username) {
-
// console.log(username)
-
// location 地址栏对象
-
location.href = '/del?username=' username
-
}
-
//修改函数
-
function update(username) {
-
location.href = '/update?username=' username
-
}
-
</script>
-
{% endblock %}
3、修改view.py
-
#!/usr/bin/env python
-
# -*- coding: utf-8 -*-
-
# @Time : 2021/12/14 14:25
-
# @Author : niubobo
-
# @File : view.py
-
# @Software: PyCharm
-
from flask import Blueprint, request, render_template, redirect
-
-
from apps.user.model import User
-
-
user_bp = Blueprint('user', __name__)
-
# 初始化一个列表保存注册用户信息
-
users = []
-
-
-
@user_bp.route('/')
-
def user_center():
-
return render_template('user/show.html', users=users)
-
-
-
@user_bp.route('/register', methods=['GET', 'POST'])
-
def register():
-
if request.method == 'POST':
-
# 获取post提交得数据
-
username = request.form.get('username')
-
password = request.form.get('password')
-
repassword = request.form.get('repassword')
-
phone = request.form.get('phone')
-
if password == repassword:
-
# 用户唯一
-
for user in users:
-
if user.username == username:
-
return render_template('user/register.html', msg='用户名已存在')
-
# 创建用户对象
-
user = User(username, password, phone)
-
# 添加到用户列表
-
users.append(user)
-
return redirect('/')
-
return render_template('user/register.html')
-
# return '用户注册'
-
-
-
@user_bp.route('/login', methods=['GET', 'POST'])
-
def login():
-
return '用户登录'
-
-
-
@user_bp.route('/del')
-
def del_user():
-
# 获取传递得username
-
username = request.args.get('username')
-
print(username)
-
print(users)
-
# 根据username找到列表users当中得user对象
-
for user in users:
-
if user.username == username:
-
# 删除用户
-
users.remove(user)
-
return redirect('/')
-
else:
-
return '删除失败'
-
-
-
@user_bp.route('/update', methods=['GET', 'POST'])
-
def update_user():
-
if request.method == 'POST':
-
# 这个realname目的是做主键,防止界面username对象被改了,你找不到对象做操作
-
realname = request.form.get('realname')
-
username = request.form.get('username')
-
password = request.form.get('password')
-
phone = request.form.get('phone')
-
for user in users:
-
if user.username == realname:
-
user.username = username
-
user.phone = phone
-
# return '更改成功'
-
return redirect('/')
-
-
-
else:
-
username = request.args.get('username')
-
for user in users:
-
if user.username == username:
-
return render_template('user/update.html', user=user)
-
-
-
-
-
@user_bp.route('/logout', methods=['GET', 'POST'])
-
def logout():
-
return '用户退出'
-
-
4、启动服务
注册
修改
查看修改结果
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhfijhbg
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
excel下划线不显示怎么办
PHP中文网 06-23 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
photoshop蒙版画笔没反应怎么办
PHP中文网 06-24