重定向/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的更多相关文章

  1. Python Web 开发的十个框架【转载】

    Python 是一门动态.面向对象语言.其最初就是作为一门面向对象语言设计的,并且在后期又加入了一些更高级的特性.除了语言本身的设计目的之外,Python标准 库也是值得大家称赞的,Python甚至还 ...

  2. python web开发之flask框架学习(1) 创建flask项目

    python 开发越来越火,作为菜鸟,也应该学习一下,感觉还可以,记录下来,方便学习参考. 不管做什么开发首先肯定是安装环境,这里我用的是pycharm,python3.如果不清楚怎么安装环境可以去网 ...

  3. python web开发之flask框架学习(2) 加载模版

    上次学习了flask的helloword项目的创建,这次来学习flask项目的模版加载: 第一步:创建一个flask项目 第二步:在项目目录的templates文件夹下创建一个html文件 第三步: ...

  4. Python Web开发:使用Django框架创建HolleWorld项目

    开发环境搭建 Python环境安装 下载地址:https://www.python.org/downloads// Django安装 打开Windows CMD输入pip install django ...

  5. Python Web开发:Django+BootStrap实现简单的博客项目

    创建blog的项目结构 关于如何创建一个Django项目,请查看[Python Web开发:使用Django框架创建HolleWorld项目] 创建blog的数据模型 创建一个文章类 所有开发都是数据 ...

  6. Python Web开发中的WSGI协议简介

    在Python Web开发中,我们一般使用Flask.Django等web框架来开发应用程序,生产环境中将应用部署到Apache.Nginx等web服务器时,还需要uWSGI或者Gunicorn.一个 ...

  7. 真正搞明白Python中Django和Flask框架的区别

    在谈Python中Django框架和Flask框架的区别之前,我们需要先探讨如下几个问题. 一.为什么要使用框架? 为了更好地阐述这个问题,我们把开发一个应用的过程进行类比,往往开发一个应用(web应 ...

  8. python web 开发学习路线

    转载,备着 自己目前学习python web 开发, 经过两个月的摸索,目前对web开发有了浅显的认识,把自己的学习过程贴出来.1.python入门推荐老齐<从零开始学python>,&l ...

  9. 转载:Python Web开发最难懂的WSGI协议,到底包含哪些内容?

    原文:PSC推出的第二篇文章-<Python Web开发最难懂的WSGI协议,到底包含哪些内容?>-2017.9.27 我想大部分Python开发者最先接触到的方向是WEB方向(因为总是有 ...

随机推荐

  1. ubuntu14.04安装opengl

    OpenGL 是一套由SGI公司发展出来的绘图函式库,它是一组 C 语言的函式,用于 2D 与 3D 图形应用程式的开发上. 不可或缺的就是编译器与基本的函式库,如果系统没有安装的话,依照下面的方式安 ...

  2. 创建和修改主键 (SQL)

    添加主键, ALTER TABLE [表名:OrderInfo] Add PRIMARY KEY ([列名:ProductID, UserID...])  多个列则是组合主键 删除主键, ALTER ...

  3. MapReduceV1作业生命周期图解以及与YARN基本对比

    仿照<hadoop技术内幕:深入解析MapReduce架构设计与实现原理>中的原图,我用手绘制了一份类似的图-_- 4大部分:HDFS,Client,JobTracker,TaskTrac ...

  4. BZOJ2424 [HAOI2010]订货 - 费用流

    题解 (非常裸的费用流 题意有一点表明不清: 该月卖出的商品可以不用算进仓库里面. 然后套上费用流模板 代码 #include<cstring> #include<queue> ...

  5. 小程序嵌套h5

    <web-view src="https://m.boc7.com/driver_unlogin/driver1"></web-view>

  6. OSGi 系列(一)之什么是 OSGi :Java 语言的动态模块系统

    OSGi 系列(一)之什么是 OSGi :Java 语言的动态模块系统 OSGi 的核心:模块化.动态.基于 OSGi 就可以模块化的开发 java 应用,模块化的部署 java 应用,还可以动态管理 ...

  7. 摹客项目在2018年工信部"创客中国"名列10强并荣获二等奖

    2018“创客中国”互联网+大数据创新创业大赛(暨2018创客中国产业投资峰会)8月19日在厦门进行了总决赛.大赛由国家工业和信息化部.厦门市人民政府主办,厦门文广集团等承办.工信部信息中心领导.厦门 ...

  8. <Linux多线程服务端编程>学习记录

    使用智能指针解决多线程下 类的解析冲突问题 有这样一个场景 使用StockFactory记录Stock的信息  容器是map<string,smart_ptr>; 代码如下: #inclu ...

  9. winsock select 学习代码(1)

    // SelectCli.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <winsock2.h> #incl ...

  10. C语言 链表基本函数

    #include <stdio.h> #include <malloc.h> typedef struct my_node mynode; struct my_node{    ...