博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
flaskr 报错及其修改
阅读量:6840 次
发布时间:2019-06-26

本文共 4406 字,大约阅读时间需要 14 分钟。

作者:hhh5460

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

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

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

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

其中flaskr.py2处报错:

# flaskr.py# 所有的导入import sqlite3from flask import Flask, request, session, g, redirect, url_for, \     abort, render_template, flash# 配置# DATABASE = '/tmp/flaskr.db' # 报错1: sqlite3.OperationalError: unable to open database fileimport osPROJECT_ROOT = os.path.dirname(os.path.realpath(__file__))DATABASE = os.path.join(PROJECT_ROOT, 'tmp', 'flaskr.db') # 改正1:不把路径写死DEBUG = TrueSECRET_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 closingdef 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 unicode            db.cursor().executescript(f.read().decode()) # 改正2:加了decode()        db.commit()@app.before_requestdef before_request():    g.db = connect_db()@app.teardown_requestdef 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 = None    if 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'] = True            flash('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 osimport flaskrimport unittestimport tempfileclass FlaskrTestCase(unittest.TestCase):    def setUp(self):        self.db_fd, flaskr.app.config['DATABASE'] = tempfile.mkstemp()        flaskr.app.config['TESTING'] = True        self.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.data        rv = self.logout()        assert b'You were logged out' in rv.data        rv = self.login('adminx', 'default')        assert b'Invalid username' in rv.data        rv = 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='
', text='
HTML allowed here'), follow_redirects=True) assert b'No entries here so far' not in rv.data assert b'<Hello>' in rv.data assert b'
HTML allowed here' in rv.dataif __name__ == '__main__': unittest.main()

效果图

QQ%E6%88%AA%E5%9B%BE20170305024804.bmp

转载地址:http://gtkul.baihongyu.com/

你可能感兴趣的文章
数制之十进制转成其他进制
查看>>
运用bind()和connect()函数
查看>>
帧、数据报、段、Frame Datagram Segment Packet Fragment
查看>>
推荐一款免费的AD审计工具------Netwrix AD变更通知工具
查看>>
Xcode8控制台输出大量无用信息的解决方案
查看>>
【简单的留言本】用HTML新增的数据库实现
查看>>
asp.net4 报 “请求的内容似乎是脚本,因而将无法由静态文件处理程序来处理”...
查看>>
OpnAI将可预测序列中下一段文字、图像和语音
查看>>
PowerQuery与PowerPivot将引爆你的桌面级数据分析:能量巨大,超出你想象!
查看>>
钱找上门来了,你做好准备了吗?(采购成熟稳定软件模块、按统一要求修正)...
查看>>
硬盘无法访问由于IO设备错误,无法运行此项请求,里面的资料怎么寻回
查看>>
老友记台词笔记S0101-ijk英语
查看>>
LAMP环境搭建WordPress博客
查看>>
Oracle 数据库 数据文件 表 表空间 用户的关系(转)
查看>>
22.jvm参数优化
查看>>
sqlite 数据类型
查看>>
数据库管理
查看>>
SQL收缩数据库
查看>>
Linux基本防护措施
查看>>
Android 日志级别总结
查看>>