Flask_入门
django是个大而全的框架,flask是一个轻量级的框架。
django内部为我们提供了非常多的组件:orm / session / cookie / admin / form / modelform / 路由 / 视图 / 模板 / 中间件 / 分页 / auth / contenttype / 缓存 / 信号 / 多数据库连接
flask框架本身没有太多的功能:路由/视图/模板(jinja2)/session/中间件 ,第三方组件非常齐全。
注意:django的请求处理是逐一封装和传递; flask的请求是利用上下文管理来实现的。
安装
pip3 install flask #会自动安装依赖
1. 依赖wsgi Werkzeug
from werkzeug.serving import run_simple
def func(environ, start_response):
print('请求来了')
pass
if __name__ == '__main__':
run_simple('127.0.0.1', 5000, func)
from werkzeug.serving import run_simple
class Flask(object):
def __call__(self,environ, start_response):
return "xx"
app = Flask()
if __name__ == '__main__':
run_simple('127.0.0.1', 5000, app)
from werkzeug.serving import run_simple
class Flask(object):
def __call__(self,environ, start_response):
return "xx"
def run(self):
run_simple('127.0.0.1', 5000, self)
app = Flask()
if __name__ == '__main__':
app.run()
2. 快速使用flask
from flask import Flask
# 创建flask对象
app = Flask(__name__)
@app.route('/index')
def index():
return 'hello world'
@app.route('/login')
def login():
return 'login'
if __name__ == '__main__':
app.run()
总结:
- flask框架是基于werkzeug的wsgi实现,flask自己没有wsgi。
- 用户请求一旦到来,就会之
app.__call__
方法 。 - 写flaks标准流程
3.用户登录&用户管理
from flask import Flask,render_template,jsonify,request,redirect,url_for,session
import functools
app = Flask(__name__)
app.secret_key = 'zbbzxy521521!'
DATA_DICT = {
1:{'name':'zbb','age':24},
2:{'name':'zxy','age':18}
}
def auth(func):
@functools.wraps(func)
def inner(*args,**kwargs):
username = session.get('xxx')
if not username:
return redirect(url_for('login'))
return func(*args,**kwargs)
return inner
@app.route('/login',methods=['GET','POST'])
def login():
if request.method == 'GET':
return render_template('login.html')
user = request.form.get('user')
pwd = request.form.get('pwd')
if user == 'zbb' and pwd == 'zxy':
session['xxx'] = 'zbb'
return redirect('/index')
error = "输入哟有误"
return render_template('login.html',error=error)
@app.route('/index',endpoint='idx')
@auth
def index():
data_dict = DATA_DICT
return render_template('index.html',data_dict=data_dict)
@app.route('/edit',methods=['GET','POST'])
@auth
def edit():
nid = request.args.get('nid')
nid = int(nid)
info = DATA_DICT[nid]
if request.method == "GET":
return render_template('edit.html',info=info)
user = request.form.get('name')
pwd = request.form.get('age')
DATA_DICT[nid]['name']=user
DATA_DICT[nid]['age']=pwd
return redirect(url_for('idx'))
@app.route('/del/<int:nid>')
@auth
def delete(nid):
del DATA_DICT[nid]
return redirect(url_for('idx'))
if __name__ == '__main__':
app.run()
edit.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form method="post">
<input type="text" name = 'name' value="{{ info.name }}">
<input type="text" name = age value="{{ info.age }}">
<input type="submit" name = '提交'>>
</form>
</body>
</html>
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>用户列表</h1>
<table border="1">
<thead>
<tr>
<th>id</th>
<th>用户名</th>
<th>年龄</th>
<th>操作</th>
</tr>
</thead>
<tbody>
{% for key,value in data_dict.items() %}
<tr>
<td>{{ key }}</td>
<td>{{ value.name }}</td>
<td>{{ value.age }}</td>
<td>
<a href="/edit?nid={{key}}">编辑</a>
<a href="/del/{{key}}">删除</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</body>
</html>
login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>用户登录</h1>
<form method="post">
<input type="text" name = 'user'>
<input type="text" name = pwd>
<input type="submit" name = '提交'><span style="color: red;">{{ error }}</span>
</form>
</body>
<script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
</html>
4.总结
1.flask路由
@app.route('/login',methods=['GET','POST'])
def login():
pass
2.路由的参数
@app.route('/login',methods=['GET','POST'],endpoint="login")
def login():
pass
# 注意:endpoint不能重名
3.动态路由
@app.route('/index')
def login():
pass
@app.route('/index/<name>')
def login(name):
pass
@app.route('/index/<int:nid>')
def login(nid):
pass
4.获取提交的数据
from flask import request
@app.route('/index')
def login():
request.args # GET形式传递的参数
request.form # POST形式提交的参数
5.返回数据
@app.route('/index')
def login():
return render_template('模板文件')
return jsonify()
reutrn redirect('/index/') # reutrn redirect(url_for('idx'))
return "...."
6.模板处理
{{ x }}
{% for item in list %}
{{item}}
{% endfor %}
7.session处理
app.secret_key = 'zbbzxy521521!' #设置key
session['xxx'] = 'zbb' #登录功之后添加session
Flask_入门的更多相关文章
- flask_入门教程之一
一.教程涉及开发语言.脚本.框架.数据库等内容 Python + Flask + requests 通过命令安装:pip install flask 二.创建第一个flask脚本 一个最小的 Flas ...
- Angular2入门系列教程7-HTTP(一)-使用Angular2自带的http进行网络请求
上一篇:Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数 感觉这篇不是很好写,因为涉及到网络请求,如果采用真实的网络请求,这个例子大家拿到手估计还要自己写一个web ...
- ABP入门系列(1)——学习Abp框架之实操演练
作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...
- Oracle分析函数入门
一.Oracle分析函数入门 分析函数是什么?分析函数是Oracle专门用于解决复杂报表统计需求的功能强大的函数,它可以在数据中进行分组然后计算基于组的某种统计值,并且每一组的每一行都可以返回一个统计 ...
- Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数
上一篇:Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数 之前介绍了简单的路由以及传参,这篇文章我们将要学习复杂一些的路由以及传递其他附加参数.一个好的路由系统可以使我们 ...
- Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数
上一篇:Angular2入门系列教程-服务 上一篇文章我们将Angular2的数据服务分离出来,学习了Angular2的依赖注入,这篇文章我们将要学习Angualr2的路由 为了编写样式方便,我们这篇 ...
- Angular2入门系列教程4-服务
上一篇文章 Angular2入门系列教程-多个组件,主从关系 在编程中,我们通常会将数据提供单独分离出来,以免在编写程序的过程中反复复制粘贴数据请求的代码 Angular2中提供了依赖注入的概念,使得 ...
- wepack+sass+vue 入门教程(三)
十一.安装sass文件转换为css需要的相关依赖包 npm install --save-dev sass-loader style-loader css-loader loader的作用是辅助web ...
- wepack+sass+vue 入门教程(二)
六.新建webpack配置文件 webpack.config.js 文件整体框架内容如下,后续会详细说明每个配置项的配置 webpack.config.js直接放在项目demo目录下 module.e ...
随机推荐
- typedef struct和指针
在学习链表时遇到了typedef已经用typedef定义的指针,不是很懂,某浪里有位博主的博文写的很详细,我直接粘过来 假设我们定义一个结构体: typedef struct ANSWER_HEADE ...
- deepin Linux 安装+工作学习配置
一 安装 在官网下载 U盘安装,神舟优雅x4开机按F7,选择U盘启动. U盘安装器在下载的镜像文件中. 二 配置 升级最新系统 设置root用户密码: dawn@dawn-PC:~$ sudo pas ...
- epoll反应堆
/* * epoll基于非阻塞I/O事件驱动 */ #include <stdio.h> #include <sys/socket.h> #include <sys/ep ...
- 微信小程序之scroll-view的坑
好久没动小程序了,今天打算复习复习,结果刚写了一个scroll-view就遇到了一个坑,这怎么能忍,对比看文档也没发现那里出了问题,没办法只能去翻翻微信给的demo,发现scroll-view一个必要 ...
- CDN之Web Cache
1. Cache 的工作方式 Web Cache 作为一种网页缓存技术,可以在用户访问网站服务器的任何一个中间网元上实现.根据 HTTP 协议的定义,在一次网页访问中,用户从客户端发出请求到网站服务器 ...
- markdown简单的使用方法
转自 https://www.cnblogs.com/math/p/se-tools-001.html 作者:正交分解 1.如何切换编辑器 切换博客园编辑器为MarkDown:MarkDown Edi ...
- tp5 模型关联,多表联查实用方法
1.模型中建立关联关系 public function goods(){ return $this->belongsTo('app\common\model\goods\Goods', 'goo ...
- 设置Fedora能够使用root用户登录
1. 切换到root工作环境,因为一下操作必须拥有root权限 [ha@localhost ~]$ su root密码: 2. 编辑/etc/pam.d/gdm [root@localhost ha] ...
- 如何解决Sublime text中文乱码问题
Sublime Text 2是一个非常不错的源代码及文本编辑器,但是不支持GB2312和GBK编码在很多情况下会非常麻烦.不过Sublime Package Control所以供的插件可以让Subli ...
- Fragment 和Activity的数据传递实例代码
package com.example.fragment; import android.os.Bundle; import android.support.v4.app.FragmentActivi ...