作者:hhh5460

官网有一个flaskr的例子,按照其8个步骤(包括测试),一步一步照着做,有3个地方报错。

究其原因,可能是flaskr这个例子年代比较久远,而现在python以及flask都有了很大的变动。

我的环境:win7(64) + python 3.5(64)

这里只直接贴出修改后的代码(出错的地方被注释了)。

其中flaskr.py2处报错:

# flaskr.py# 所有的导入
import sqlite3
from flask import Flask, request, session, g, redirect, url_for, \abort, render_template, flash# 配置
# DATABASE = '/tmp/flaskr.db' # 报错1: sqlite3.OperationalError: unable to open database file
import os
PROJECT_ROOT = os.path.dirname(os.path.realpath(__file__))
DATABASE = os.path.join(PROJECT_ROOT, 'tmp', 'flaskr.db') # 改正1:不把路径写死
DEBUG = True
SECRET_KEY = 'development key'
USERNAME = 'admin'
PASSWORD = 'default'# 创建我们的小程序
app = Flask(__name__)
app.config.from_object(__name__) # from_object() 将会寻找给定的对象(如果它是一个字符串,则会导入它),# 搜寻里面定义的全部大写的变量。def connect_db():return sqlite3.connect(app.config['DATABASE'])from contextlib import closing
def init_db():with closing(connect_db()) as db:with app.open_resource('schema.sql') as f:#db.cursor().executescript(f.read()) # 报错2: ValueError: script argument must be unicodedb.cursor().executescript(f.read().decode()) # 改正2:加了decode()db.commit()@app.before_request
def before_request():g.db = connect_db()@app.teardown_request
def teardown_request(exception):g.db.close()#四个视图函数:
# 1.显示条目
@app.route('/')
def show_entries():cur = g.db.execute('select title, text from entries order by id desc')entries = [dict(title=row[0], text=row[1]) for row in cur.fetchall()]return render_template('show_entries.html', entries=entries)# 2.添加新条目
@app.route('/add', methods=['POST'])
def add_entry():if not session.get('logged_in'):abort(401)g.db.execute('insert into entries (title, text) values (?, ?)',[request.form['title'], request.form['text']])g.db.commit()flash('New entry was successfully posted')return redirect(url_for('show_entries'))# 3.登录
@app.route('/login', methods=['GET', 'POST'])
def login():error = Noneif request.method == 'POST':if request.form['username'] != app.config['USERNAME']:error = 'Invalid username'elif request.form['password'] != app.config['PASSWORD']:error = 'Invalid password'else:session['logged_in'] = Trueflash('You were logged in')return redirect(url_for('show_entries'))return render_template('login.html', error=error)# 4.注销
@app.route('/logout')
def logout():session.pop('logged_in', None)flash('You were logged out')return redirect(url_for('show_entries'))if __name__ == '__main__':app.run()

另,测试文件flaskr_test.py1处报错:

import os
import flaskr
import unittest
import tempfileclass FlaskrTestCase(unittest.TestCase):def setUp(self):self.db_fd, flaskr.app.config['DATABASE'] = tempfile.mkstemp()flaskr.app.config['TESTING'] = Trueself.app = flaskr.app.test_client()flaskr.init_db()def tearDown(self):os.close(self.db_fd)os.unlink(flaskr.app.config['DATABASE'])# 测试1:访问应用程序的根目录(/)def test_empty_db(self):rv = self.app.get('/')#assert 'No entries here so far' in rv.data # 报错3:TypeError: a bytes-like object is required, not 'str'assert b'No entries here so far' in rv.data # 改正3:文字修改为byte类型(或者rv.data修改为rv.data.decode()),以下都要同样修改!!def login(self, username, password):return self.app.post('/login', data=dict(username=username, password=password), follow_redirects=True)def logout(self):return self.app.get('/logout', follow_redirects=True)# 测试2:登录和注销def test_login_logout(self):rv = self.login('admin', 'default')assert b'You were logged in' in rv.datarv = self.logout()assert b'You were logged out' in rv.datarv = self.login('adminx', 'default')assert b'Invalid username' in rv.datarv = self.login('admin', 'defaultx')assert b'Invalid password' in rv.data# 测试3:添加新条目def test_messages(self):self.login('admin', 'default')rv = self.app.post('/add', data=dict(title='<Hello>', text='<strong>HTML</strong> allowed here'), follow_redirects=True)assert b'No entries here so far' not in rv.dataassert b'&lt;Hello&gt;' in rv.dataassert b'<strong>HTML</strong> allowed here' in rv.dataif __name__ == '__main__':unittest.main()

效果图

flaskr 报错及其修改相关推荐

  1. mysql5.7 delimiter_percona MYSQL 5.7.13 5.7.14 MYSQLDUMP 导入报错delimiter (修改MYSQLDUMP代码)...

    percona MYSQL 5.7.13 5.7.14 MYSQLDUMP 导入报错delimiter (修改MYSQLDUMP代码) 重庆八怪 2016-09-26 15:12:22 浏览1094 ...

  2. stm8s003 8K空间不够用,出现报错,修改stvd参数进行最优化

    stm8s008空间大小是8K 使用的时候会出现空间不够用的情况,这个时候要对软件进行一些设置,从而优化程序大小. 1,修改优化等级,如下图所示,这样会优化掉无关的函数,将代码优化到最大程度 2,如果 ...

  3. VMWare 环境下devstack创建虚拟机报错及修改nova-api返回数据得条目

    1.在生产环境中, 由于某个tenant下创建了有1300+条得security-group通过查询nova得数据库可以看出确实有1300+条得存在,但是通过curl调用的时候发现返回得数目只有100 ...

  4. mysql修改存储引擎报错_修改mysql存储引擎备份数据库报错及解决方案

    备份数据库报错 原因:由于监控服务器最近cpu负载比较高.(cpu4核心,负载2.7左右)感觉很奇怪,因为别的服务器mysql占用的资源并不多,因此我首先优化了数据库的配置文件.cpu稍微下降了一点, ...

  5. RocketMQ_问题_启动报错,修改堆内存大小

    启动broker报错 虚拟机内存小,导致虚拟机中的JVM内存小,进而在启动broker时分配JVM内存遇到问题 查看/usr/local/rocketmq-all-4.3.0/distribution ...

  6. kartoSLAM报错 transform_tolerance修改解决

    文章目录 报错说明 报错逐个查找 [ WARN] [1577853090.145887813]: Costmap2DROS transform timeout. Current time: 15778 ...

  7. mysql报错3009_MySQL修改密码方法汇总

    MySQL5.7版本之前修改密码的方法: 方法1: 用SET PASSWORD命令 mysql -u root mysql> SET PASSWORD FOR 'root'@'localhost ...

  8. mysql修改密码总是报错_mysql修改密码报错 | 吴老二

    mysql已经安装好了,不过重置密码的时候使用update修改mysql的密码出现了报错,我的mysql是5.7版本的 mysql> use mysql Reading table inform ...

  9. vscode flake8报错E501, 修改settings.json无效

    问题 vscode flake8报错E501, 根据网上的解决方案,修改settings.json,在其中添加代码加大检查长度或者忽略对应错误,具体代码如下: "python.linting ...

最新文章

  1. Shell 正则表达式总结及其含义举例
  2. java跟setattribute,java 中的request.setAttribute和session.setAttribute的区别
  3. CCF201909-4 推荐系统(100分)【模拟】
  4. Memory Networks
  5. matlab安装软件 Matlab视频教程李大勇 MATLAB程序开发入门课程 MATLAB神经网络30个案例分析及源程序
  6. 用MP3或WAV制作人声铃声的简单教程
  7. 几种流行的开源WebService框架Axis1,Axis2,Xfire,CXF,JWS比较
  8. SONY 系列手机 Android 5.1 系统 Root 方法
  9. Pytorch-早停法(early stopping)原理及其代码
  10. 6款免费的PDF解锁软件
  11. Diss GitHub被收购?说不定是件大喜事呢!
  12. 计算机管理可以全自动,这款全自动化的小工具,可以让你在父母面前光明正大得玩电脑啦...
  13. Windows Live Writer 代码插件改造
  14. 清明五一假期催热周边自驾游 迪庆州应势推出“杜鹃花之旅”
  15. Unity 利用Skybox Panoramic着色器制作全景图预览有条缝隙问题解决办法
  16. java中使用Jedis操作Redis实例
  17. 小程序真机调试代码包太大
  18. 搭建网校平台的具体方法
  19. 做网站的人必须遵守的N大定律
  20. 常见面试题的基础总结(JVM篇)

热门文章

  1. 基于Springboot实现医院HIS信息管理系统
  2. pandas替换列值+1
  3. linux下的基础操作
  4. linux php 调用exec() 中,svn遇到的问题
  5. Linux NAPI/非NAPI
  6. RGB格式等比例缩放
  7. Centos普通用户提权至ROOT
  8. Kali Linux Web 渗透测试— 第十二课-websploit
  9. 给url添加时间戳,解决浏览器缓存
  10. 一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之登录窗口调试...