python web开发——c2 flask框架和flask_script
重定向/error
通过flask中的redirect方法和自定义的newpath函数、redirect_demo函数实现重定向:
#coding:utf-8 from flask import Flask, render_template,request,make_response,redirect app = Flask(__name__)
app.jinja_env.line_statement_prefix = '#' @app.route('/index/')
@app.route('/')
def index():
return "hello" @app.route('/profile/<int:uid>/',methods =['GET','POST'])
def profile(uid):
#传tuple类型的数据
colors = ('red','green') infos = {'nowcoder':'yy','google':'fdf'} #或者直接用return ('profile:'+str(uid))
return render_template('profile.html',uid = uid,colors = colors,infos = infos)
#前端的语言的写法uid = uid传参,将uid参数传到templates中html文件里的uid处。 @app.route('/request')
def request_demo(): key = request.args.get('key','defaultkey') #输入为http://127.0.0.1:5000/request?key=fdf时网页第一行会打印出fdf
res = request.args.get('key','defaultkey') + '<br>' res = res + request.url +'||' + request.path + '<br>' for property in dir(request):
res = res + str(property) + '|==|<br>' + str(eval('request.'+property))+'<br>'
#dir--查看属性,eval response = make_response(res)
response.set_cookie('nowcoder',key)
response.status = ''
response.headers['nowcoder'] = 'hello~'
return response
#重定向,即跳转
@app.route('/newpath')
def newpath():
return 'newpath' @app.route('/re/<int:code>')
def redirect_demo(code):
return redirect('/newpath',code = code) if __name__ == '__main__':
app.run(debug=True)
此时在网址末端修改为/newpath或/re/302(临时重定向)即可看到:
如果将网址末端改为/re/301(永久性跳转),发现不管跳转几次,Log中只有一个301跳转记录(理论上应该这样,但safari和google的浏览器结果不一样):
#错误处理(找不到该页面的统一处理)
在Py文件中定义page_not_found方法:
#找不到页面的处理
@app.errorhandler(404)
def page_not_found(error): return render_template('not_found.html',url = request.url)
再在templates文件夹中新建一个not_found.html文件:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Not Found</title>
{{ url }}
</head>
<body> </body>
</html>
这时在网址中键入无效地址则会显示:
其中返回的是键入的无效地址
#页面交互,以登录界面为例
页面间的交互要在原来代码的基础上改变几件事情:
1)导入flash,get_flashed_messages模块
2) 新添加映射@app.route('/login')
3)因为login页面要和首页‘/’交互,因此修改映射@app.route('/')
4)页面交互需要设置一个随机的唯一的eudi,用serect_key来设置
#coding:utf-8 from flask import Flask, render_template,request,make_response,redirect,flash,get_flashed_messages app = Flask(__name__)
app.jinja_env.line_statement_prefix = '#'
app.secret_key = 'nowcoder' @app.route('/index/')
@app.route('/')
def index():
res = ''
#flash把消息传过去,get_flashed_messages把消息传回来
for msg in get_flashed_messages():
res = res + msg +'<br>'
res+= 'hello'
return res @app.route('/profile/<int:uid>/',methods =['GET','POST'])
def profile(uid):
#传tuple类型的数据
colors = ('red','green') infos = {'nowcoder':'yy','google':'fdf'} #或者直接用return ('profile:'+str(uid))
return render_template('profile.html',uid = uid,colors = colors,infos = infos)
#前端的语言的写法uid = uid传参,将uid参数传到templates中html文件里的uid处。 @app.route('/request')
def request_demo(): key = request.args.get('key','defaultkey') #输入为http://127.0.0.1:5000/request?key=fdf时网页第一行会打印出fdf
res = request.args.get('key','defaultkey') + '<br>' res = res + request.url +'||' + request.path + '<br>' for property in dir(request):
res = res + str(property) + '|==|<br>' + str(eval('request.'+property))+'<br>'
#dir--查看属性,eval response = make_response(res)
response.set_cookie('nowcoder',key)
response.status = '404'
response.headers['nowcoder'] = 'hello~'
return response
#重定向,即跳转
@app.route('/newpath')
def newpath():
return 'newpath' @app.route('/re/<int:code>')
def redirect_demo(code):
return redirect('/newpath',code = code) #找不到页面的处理
@app.errorhandler(404)
def page_not_found(error): return render_template('not_found.html',url = request.url) #输入的网址的末端和'/login'正则匹配的话就让网页跳转到由Login定义的新页面
@app.route('/login')
def login():
#flash把消息传过去,'/'表示返回首页
flash('登录成功!')
return redirect('/') if __name__ == '__main__':
app.run(debug=True)
键入login显示消息:
原理:flash中的消息传入get_flashed_messages中,然后return redirect()跳转到首页,首页方法中的return显示出最后的内容。
#logger:用来记录服务器最近发生的事
主要分为:
1)导入模块
2)登录成功后用logger记录
3)记录3种不同类型的log
4)设置log文件的存储路径
5) 在主函数中设置logger
#coding:utf-8 from flask import Flask, render_template,request,make_response,redirect,flash,get_flashed_messages
import logging
from logging.handlers import RotatingFileHandler app = Flask(__name__)
app.jinja_env.line_statement_prefix = '#'
app.secret_key = 'nowcoder' @app.route('/index/')
@app.route('/')
def index():
res = ''
#flash把消息传过去,get_flashed_messages把消息传回来
for msg in get_flashed_messages():
res = res + msg +'<br>'
res+= 'hello'
return res @app.route('/profile/<int:uid>/',methods =['GET','POST'])
def profile(uid):
#传tuple类型的数据
colors = ('red','green') infos = {'nowcoder':'yy','google':'fdf'} #或者直接用return ('profile:'+str(uid))
return render_template('profile.html',uid = uid,colors = colors,infos = infos)
#前端的语言的写法uid = uid传参,将uid参数传到templates中html文件里的uid处。 @app.route('/request')
def request_demo(): key = request.args.get('key','defaultkey') #输入为http://127.0.0.1:5000/request?key=fdf时网页第一行会打印出fdf
res = request.args.get('key','defaultkey') + '<br>' res = res + request.url +'||' + request.path + '<br>' for property in dir(request):
res = res + str(property) + '|==|<br>' + str(eval('request.'+property))+'<br>'
#dir--查看属性,eval response = make_response(res)
response.set_cookie('nowcoder',key)
response.status = ''
response.headers['nowcoder'] = 'hello~'
return response
#重定向,即跳转
@app.route('/newpath')
def newpath():
return 'newpath' @app.route('/re/<int:code>')
def redirect_demo(code):
return redirect('/newpath',code = code) #找不到页面的处理
@app.errorhandler(404)
def page_not_found(error): return render_template('not_found.html',url = request.url) #输入的网址的末端和'/login'正则匹配的话就让网页跳转到由Login定义的新页面
@app.route('/login')
def login():
#flash把消息传过去,'/'表示返回首页
app.logger.info('log succeed!')
flash('登录成功!')
return redirect('/') @app.route('/log/<level>/<msg>/')
def log(level,msg):
dict = {'warning':logging.WARN,'error':logging.ERROR,'info':logging.INFO}
if level in dict:
app.logger.log(dict[level],msg)
return 'logged:'+msg def set_logger():
#将info log存到D:对应路径
info_file_handler = RotatingFileHandler('/Users/icarus/Documents/info.txt')
info_file_handler.setLevel(logging.INFO)
app.logger.addHandler(info_file_handler)
warn_file_handler = RotatingFileHandler('/Users/icarus/Documents/warn.txt')
warn_file_handler.setLevel(logging.WARN)
app.logger.addHandler(warn_file_handler)
error_file_handler = RotatingFileHandler('/Users/icarus/Documents/error.txt')
error_file_handler.setLevel(logging.ERROR)
app.logger.addHandler(error_file_handler) if __name__ == '__main__':
set_logger()
app.run(debug=True)
#flask_script框架
搭好基本框架后在pycharm中打开终端,能发现manager.py文件拥有的功能:shell,runserver;
运行runserver功能:
在py文件中添加@mannager.command装饰器会发现py文件多了我们自定义的功能:
#coding:utf-8
from flask_script import Manager
from test import app #定义一个script的manager
manager = Manager(app) @manager.command
def hello(name):
print ('hello',name) @manager.command
def initialized_database():
#初始化数据库
print ('database...') if __name__ =='__main__':
manager.run()
python web开发——c2 flask框架和flask_script的更多相关文章
- Python Web 开发的十个框架【转载】
Python 是一门动态.面向对象语言.其最初就是作为一门面向对象语言设计的,并且在后期又加入了一些更高级的特性.除了语言本身的设计目的之外,Python标准 库也是值得大家称赞的,Python甚至还 ...
- python web开发之flask框架学习(1) 创建flask项目
python 开发越来越火,作为菜鸟,也应该学习一下,感觉还可以,记录下来,方便学习参考. 不管做什么开发首先肯定是安装环境,这里我用的是pycharm,python3.如果不清楚怎么安装环境可以去网 ...
- python web开发之flask框架学习(2) 加载模版
上次学习了flask的helloword项目的创建,这次来学习flask项目的模版加载: 第一步:创建一个flask项目 第二步:在项目目录的templates文件夹下创建一个html文件 第三步: ...
- Python Web开发:使用Django框架创建HolleWorld项目
开发环境搭建 Python环境安装 下载地址:https://www.python.org/downloads// Django安装 打开Windows CMD输入pip install django ...
- Python Web开发:Django+BootStrap实现简单的博客项目
创建blog的项目结构 关于如何创建一个Django项目,请查看[Python Web开发:使用Django框架创建HolleWorld项目] 创建blog的数据模型 创建一个文章类 所有开发都是数据 ...
- Python Web开发中的WSGI协议简介
在Python Web开发中,我们一般使用Flask.Django等web框架来开发应用程序,生产环境中将应用部署到Apache.Nginx等web服务器时,还需要uWSGI或者Gunicorn.一个 ...
- 真正搞明白Python中Django和Flask框架的区别
在谈Python中Django框架和Flask框架的区别之前,我们需要先探讨如下几个问题. 一.为什么要使用框架? 为了更好地阐述这个问题,我们把开发一个应用的过程进行类比,往往开发一个应用(web应 ...
- python web 开发学习路线
转载,备着 自己目前学习python web 开发, 经过两个月的摸索,目前对web开发有了浅显的认识,把自己的学习过程贴出来.1.python入门推荐老齐<从零开始学python>,&l ...
- 转载:Python Web开发最难懂的WSGI协议,到底包含哪些内容?
原文:PSC推出的第二篇文章-<Python Web开发最难懂的WSGI协议,到底包含哪些内容?>-2017.9.27 我想大部分Python开发者最先接触到的方向是WEB方向(因为总是有 ...
随机推荐
- DOMNodeInserted监听div内容改变
$('.cw-icon .ci-count').on('DOMNodeInserted',function(){ $(".settleup-content .cont_loading&quo ...
- 创建WRAPPER时, SQL20076N 未对指定的操作启用数据库的实例。
您可以通过运行DB2 UPDATE DBM CFG USING FEDERATED YES来设置这个参数.修改这个参数后,必须重新启动实例才会生效(DB2STOP/DB2START).所以你会出现你的 ...
- 多网卡的7种bond模式原理 For Linux
多网卡的7种bond模式原理 Linux 多网卡绑定 网卡绑定mode共有七种(0~6) bond0.bond1.bond2.bond3.bond4.bond5.bond6 常用的有三种 mode=0 ...
- Devexpress VCL Build v2013 vol 13.2.5 发布
支持xe6 了,但是承诺的功能在哪里? What's New in 13.2.5 (VCL Product Line) New Major Features in 13.2 What's New ...
- 卡特尔16PF性格测试与答案
大学生在职业生涯规划时,必须充分注意到自己的性格和职业的适宜性.性格是指一个人在生活中形成的对现实的稳定的态度和行为方式.研究表明,性格影响着一个人的职业取向,由于性格的不同,每个人对工作和职业的态度 ...
- nodejs的优点
nodejs主要用于搭建高性能的web服务器,优点如下: 可以解决高并发,它是单线程,当访问量很多时,将访问者分配到不同的内存中,不同的内存区做不同的事,以快速解决这个线程.就像医院的分科室看病人.效 ...
- 2018.09.11 poj1845Sumdiv(质因数分解+二分求数列和)
传送门 显然需要先求出ab" role="presentation" style="position: relative;">abab的所有质因 ...
- 2018.07.26NOIP模拟 魔法数字(数位dp)
魔法数字 题目背景 ASDFZ-NOIP2016模拟 题目描述 在数论领域中,人们研究的基础莫过于数字的整除关系.一般情况下,我们说整除总在两个数字间进行,例如 a | b(a能整除b)表示 b 除以 ...
- 今天研究了一下手机通信录管理系统(C语言)
题目:手机通信录管理系统 一.题目要求 二.需求分析 三.设计步骤/编写代码 四.上机/运行结果 五.总结 一.题目要求 模拟手机通信录管理系统,实现对手机中的通信录进行管理操作.功能要求: (1)查 ...
- c++内存管理方式
概述 本章总结一些关于个人对内存管理的理解,主要包括如下内容: 内存管理原则 优秀的接口 智能指针的作用在哪里? 内存管理原则 学c++的同学都知道这个内存管理原则,就是“谁创建,谁释放”或者说“谁申 ...