基于Flask快速搭建一个管理系统
1. 用到的技术
1.1 导模块
from flask import Flask, render_template, jsonify, redirect, request, url_for, session
1.2 模块介绍
1.3 flask路由系统
1.3.1 普通使用
@app.route('/delete')
1.3.2 带有名分组
@app.route('/edit/<string:nid>', methods=['GET', 'POST']) # 有名分组 默认string
1.3.3 带请求限制
@app.route('/login', methods=['GET', 'POST']) # 默认支持get,需要手动添加post
1.3.4 带别名,默认别名是函数名
@app.route('/index', endpoint='index') # 起别名,不写默认函数名称
1.3.5 路由其他参数(默认string)
DEFAULT_CONVERTERS = {'default': UnicodeConverter,'string': UnicodeConverter,'any': AnyConverter,'path': PathConverter,'int': IntegerConverter,'float': FloatConverter,'uuid': UUIDConverter,
}
1.3.6 路由的本质
本质就是:app.add_url_rule()路由加载的源码流程
-将ur1和函数打包成为rule对象
-将ru1e对象添加到map对象中。
- app.url_map = map对象endpoint:如果不写默认是函数名,endpoint不能重名# 一般使用第一种
@app.route('/index')
def index():return render_template(' index.html ')# 第二种
def home():return render_template(' index.html ')
app.add_url_rule('/home', 'home', home)|
1.3.7 app.add_url_rule参数
@app.route和app.add_url_rule参数:
rule:URL规则
view_func:视图函数名称
defaults = None, 默认值, 当URL中无参数,函数需要参数时,使用defaults = {'k': 'v'}
为函数提供参数
endpoint = None, 名称,用于反向生成URL,即: url_for('名称')
methods = None, 允许的请求方式,如:["GET", "POST"]
#对URL最后的 / 符号是否严格要求,默认严格,False,就是不严格
strict_slashes = None'''@app.route('/index', strict_slashes=False)#访问http://www.xx.com/index/ 或http://www.xx.com/index均可@app.route('/index', strict_slashes=True)#仅访问http://www.xx.com/index'''
#重定向到指定地址
redirect_to = None, '''@app.route('/index/<int:nid>', redirect_to='/home/<nid>')'''
1.4 获取提交的数据
# 1. get请求
nid = request.args.get('nid')
# 2. post请求
username = request.form.get('username')
1.5 返回数据
1.5.1 返回时的格式
return render_template('login.html', error='用户名错误')
return render_template('login.html', **{'error':'xxx','age':'xxx'})
1.5.2 坑1,出现找不到模板,解决办法
- 项目下面是否有templates文件夹,你的html文件是否放进了里面;
- templates文件夹是否和你运行的py文件在同一级目录;
- render_template('***.html')这里面的名字是否正确,别打错了;
- app = Flask(__name__, template_folder='templates') 在最开始的这句话中,template_folder后面一定要跟上templates;
1.6 session&装饰器
1.6.1 导入&使用
import functools
from flask import session# flask使用session需要,传入一个secret_key,flask会生成一个key返回给前端,类似于cookie存储
app.secret_key = 'lfsakhfnednlasdjmcls'def auth(func):@functools.wraps(func)def inner(*args, **kwargs):if session.get('username'):# print(session.get('username'))ret = func(*args, **kwargs)return retreturn redirect(url_for('login'))return inner@app.route('/index', endpoint='index') # 起别名,不写默认函数名称
@auth
def index():"""首页"""return render_template('index.html', data_dict=DATA_LIST)
1.6.2 装饰器的使用方法
@app.before_requestdef
def func():print('xxx')def x1():print('xxx')
x1.app.before_request(x1)
1.7 request介绍
- django的请求处理是逐一封装和传递;
- flask的请求是利用上下文管理来实现的。
1.8 django/flask介绍
- django是个大而全的框架,flask是一个轻量级的框架。 django内部为我们提供了非常多的组件:
orm / session / cookie / admin / form / modelform/路由/视图/模板/中间件/分页/ auth / contenttype/缓存/信号/多数据库连接
- flask框架本身没有太多的功能:路由/视图/模板(jinja2)/session/中间件,第三方组件非常齐全。
2. 快速搭建管理系统
2.1 基本使用
from flask import Flask# 起一个名字
app = Flask(__name__)# 配置路由
@app.route('/index')
def index():return 'hello word'if __name__ == '__main__':# 启动app.run()
2.2 完整版
2.2.1 py
import functools
from flask import Flask, render_template, jsonify, redirect, request, url_for, sessionapp = Flask(__name__) # 默认 template_folder='templates'
# 模拟数据
DATA_LIST = {'1': {'name': 'a', 'age': 32},'2': {'name': 'a', 'age': 64},}
# flask使用session需要,传入一个secret_key,flask会生成一个key返回给前端,类似于cookie存储
app.secret_key = 'lfsakhfnednlasdjmcls'def auth(func):@functools.wraps(func)def inner(*args, **kwargs):if session.get('username'):# print(session.get('username'))ret = func(*args, **kwargs)return retreturn redirect(url_for('login'))return inner@app.route('/login', methods=['GET', 'POST']) # 默认支持get,需要手动添加post
def login():"""登录"""# render_template, # 类似与django中国的render# jsonify, # 类似与django中国的JsonResponse# url_for 别名if request.method == 'GET':return render_template('login.html')username = request.form.get('username')password = request.form.get('password')if username == '1' and password == '1':session['username'] = usernamereturn redirect('/index')return render_template('login.html', error='用户名错误')@app.route('/index', endpoint='index') # 起别名,不写默认函数名称
@auth
def index():"""首页"""return render_template('index.html', data_dict=DATA_LIST)@app.route('/edit/<string:nid>', methods=['GET', 'POST']) # 有名分组 默认string
@auth
def edit(nid):"""编辑"""if request.method == 'GET':user_dic = DATA_LIST.get(nid)# print(user_dic) # {'name': 'a', 'age': 32}return render_template('edit.html', user_dic=user_dic)name = request.form.get('username')age = request.form.get('age')DATA_LIST[nid]['name'] = nameDATA_LIST[nid]['age'] = agereturn redirect('/index')@app.route('/delete')
@auth
def delete():"""删除"""nid = request.args.get('nid')print(nid) # 2del DATA_LIST[nid]return redirect(url_for('index'))if __name__ == '__main__':app.run()
2.2.2 login.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>登录</title>
</head>
<body>
<form method="post"><p>用户名:<input type="text" name="username"></p><p>密码:<input type="password" name="password"></p>{{ error }}<input type="submit" value="提交">
</form>
</body>
</html>
2.2.3 index.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div><div class="bs-example" data-example-id="hoverable-table"><div class="panel panel-info"><div class="panel-heading"><h3 class="panel-title">xx管理系统</h3></div><div class="panel-body"><table class="table table-hover"><thead><tr><th>序号</th><th>名称</th><th>年龄</th><th>操作</th></tr></thead><tbody>{% for key,item in data_dict.items() %}<tr><th scope="row">{{ key }}</th><td>{{ item.name }}</td><td>{{ item["age"] }}</td><td><a href="/edit/{{ key }}">编辑</a>|<a href="/delete?nid={{ key }}">删除</a></td></tr>{% endfor %}</tbody></table></div></div></div>
</div>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script>
</body>
</html>
2.2.4 edit.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>编辑</title>
</head>
<body>
<form method="post"><p>用户名:<input type="text" name="username" value="{{ user_dic.name }}"></p><p>密码:<input type="text" name="age" value="{{ user_dic.age }}"></p><input type="submit" value="提交">
</form>
</body>
</html>
3. 截图
基于Flask快速搭建一个管理系统相关推荐
- 基于halo快速搭建一个属于你自己的博客网站
基于halo快速搭建一个属于你自己的博客网站 公众号 前置条件 JDK安装 下载halo配置文件 下载halo的启动jar 验证启动 公众号 前置条件 首先你需要有一台自己的服务器,比如你去各类云上面 ...
- python 极速后台开发框架_基于FastAdmin快速搭建后台管理系统
[课程简介] FastAdmin是一款基于ThinkPHP5+Bootstrap的极速后台开发框架.本课程从安装.架构.一键生成.数据库.控制器.模块.前端组件等方面,对如何使用FastAdmin框架 ...
- test.php创建,基于phpstudy简单快速搭建一个php程序
原标题:基于phpstudy简单快速搭建一个php程序 人人都是程序员,希望在零碎的阅读时间里,给您一些技术提升. 1 安装phpstudy 通过以下链接download.csdn.net/downl ...
- 如何快速搭建一个基于FengMap的地图导航应用?
蜂鸟视图自成立以来就专注于提供从地图数据生产.地图编辑运维.地图应用开发的全流程专业技术产品与服务.长期的市场考验与技术迭代升级,产品功能接口较全面,性能表现优异. 日前,蜂鸟视图正式向海内外开发者用 ...
- 如何快速搭建一个属于自己的网站?
随着互联网的发展,网站建设的技术也越来越成熟,建站的方式也愈加丰富和多样.同时,互联网时代,无论是组织还是个人,无论是大企业还是小社团,拥有一个属于自己的网站,必不可少. 可是,不同的组织.不同的人, ...
- 创建微服务架构的步骤_如何快速搭建一个微服务架构?
原标题:如何快速搭建一个微服务架构? 微服务火了很久,但网上很少有文章能做到成熟地将技术传播出来,同时完美地照顾"初入微服务领域人员",从 0 开始,采用通俗易懂的语言去讲解微服务 ...
- 阿里云上基于WordPress快速搭建个人博客
阿里云上基于WordPress快速搭建个人博客 文章目录 阿里云上基于WordPress快速搭建个人博客 一.服务器环境: 二.环境部署: 1.重置实例密码 2.链接ECS服务器 3.安装Apache ...
- 使用SpringBoot一小时快速搭建一个简单后台管理(增删改查)(超详细教程)
最近也是临近期末了,各种的期末大作业,后台管理也是很多地方需要用到的,为了方便大家能快速上手,快速搭建一个简单的后台管理,我花了两天时间整理了一下 我会从0开始介绍,从数据库的设计到前端页面的引入最后 ...
- 基于 Jenkins 快速搭建持续集成环境--转
源地址:http://www.ibm.com/developerworks/cn/java/j-lo-jenkins/ 持续集成是一种软件开发实践,对于提高软件开发效率并保障软件开发质量提供了理论基础 ...
最新文章
- 求一个指定点对的路径上的最大边权或最小边权(转)
- [转]Vi 教程(Unix行编辑器)
- HP Z840 工作站配sSAS Raid 安装 Ubuntu 16.04 系统
- js template换行_JavaScript字符串换行符?
- 【PTA天梯赛CCCC -2017决赛L2-3】图着色问题 (25 分)(图染色)
- 对象json字符串数组 java对象,java把json的字符串转换为json对象和数组
- FastDFS多tracker配置
- Ghost XP SP2 64位 纯净珍藏版
- .NET架构设计、框架设计系列文章总结
- uw计算机专业大一课程,大一新生选课攻略和你不能错过的小技巧
- matlab中fix函数是啥,fix函数(函数fix是什么意思)
- 三十九、如何单独发布jar包
- 【已解决】Android Studio下,gradle project sync failed 错误
- android仿咸鱼底部导航栏,Flutter沉浸式状态栏/AppBar导航栏/仿咸鱼底部凸起导航栏效果...
- Git 最著名报错 “ERROR: Permission to XXX.git denied to user”终极解决方案
- 微信小程序产品定位及功能介绍
- 你感受过VR视频故事线吗?适用于哪些方面?
- NVIDIA Tesla T4 检修纪录之基础安装问题
- 分享基于JavaEE移动平台的企业级房地产ERP采购系统全程开发实录
- Python五分钟教你制作一个太阳