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方向(因为总是有 ...
随机推荐
- Golang之hello,beego
学习谢大神的beego记录 过程: 目录结构: 编译命令: go build -o myBeego.exe go_dev/day13/beego_example/main执行myBeego.exe即可 ...
- 不要用for in语句对数组进行遍历
for...in主要用于对数组和对象的属性进行遍历.for ... in 循环中的代码每执行一次,就会对数组的元素或者对象的属性进行一次操作. 语法:for (variable in object) ...
- 记录下 UTF6 GBK 转换函数
int GBK2UTF8(char *szGbk,char *szUtf8,int Len) { // 先将多字节GBK(CP_ACP或ANSI)转换成宽字符UTF-16 // 得到转换后,所需要的内 ...
- linux信号量初识
以下程序使用信号量控制程序运行 "信号"量 "变"量 /*信号量(semaphore)是变量,是一种特殊的变量.它仅取正值. 对信息号量的操作只有2种:等待(w ...
- 乞丐版servlet容器第2篇
2. 监听端口接收请求 上一步中我们已经定义好了Server接口,并进行了多次重构,但是实际上那个Server是没啥毛用的东西. 现在要为其添加真正有用的功能. 大师说了,饭要一口一口吃,衣服要一件一 ...
- Devexpress VCL Build v2014 vol 14.2.6 发布
终于支持XE8 了.需要这么长时间吗? New Major Features in 14.2 What's New in VCL Products 14.2 Feature Highlights To ...
- 解决启动nginx时报80端口被占用的问题
如何解决启动nginx时报80端口被占用 最近公司的的一个服务器上需要部署多个项目,但80端口只有一个,所有只有使用Nginx来代理,当访问域名时就可以自动 转到IP:端口号,而不需要在域名后面加端口 ...
- 2018.06.30 BZOJ1026: [SCOI2009]windy数(数位dp)
1026: [SCOI2009]windy数 Time Limit: 1 Sec Memory Limit: 162 MB Description windy定义了一种windy数.不含前导零且相邻两 ...
- Spring3.x错误--Pointcut is not well-formed:expecting 'name pattern' at...
Spring3.x错误: 解决方法: (*com.dayang.service..*(..)) *和com.dayang.之间有空格
- 保留注释换行的python模块configparser
python语言用来解析配置文件的模块是ConfigParser,python3中是configparser模块,我在使用中发现write方法在将配置项重新写入文 件时,配置文件中的空行和注释行都会被 ...