Coder Social home page Coder Social logo

helloflask's Introduction

HelloFlask

HelloFlask 的 Meta 仓库,包含 HelloFlask 相关文档和示例程序。

Links

Books

Examples

《Flask Web 开发实战》示例程序:

《Flask Web 开发实战(第 2 版)》示例程序:

《Flask 入门教程》示例程序

Feedbacks

helloflask's People

Contributors

angelliang avatar bbbbx avatar blankerl avatar greyli avatar hjlarry avatar hunter-ji avatar imyufanli avatar jpch89 avatar lanmie avatar meizhaohui avatar snailzsj avatar vimiix avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

helloflask's Issues

纸质书51页图2-11笔误

  • 章节位置(比如3.3.2):2.3.3
  • 页数(如果是纸书的话):48页 图 2-11 Cookie 设置示意图
  • 错误文字:200 OK
  • 正确文字:302 Found
  • 备注:服务器重定向响应

第一部分 第四章 表单 110页 login.html 和 basic.html

今天回顾复习"表单"的时候偶然发现
代码清单4-2里面"return render_template('login.html', form=form)"
和代码清单4-3的标题"form/templates/basic.html"
一开始看的时候没注意到这个问题,
请问,这里应该都是basic.html的模板吧?
还请指点。

勘误,电子书「12.3.2 编写测试用例」-「代码清单12-2」拼写错误

豆瓣电子书,「12.3.2 编写测试用例」章节,「代码清单12-2」:

代码清单12-2 test_sayhello.py:基本测试

import unittest
from sayhello import app, db

class SayHelloTestCase(unittest.TestCase):

    ...
    def test_app_exsit(self):
        self.assertFalse(app is None)

test_app_exsit中的exsit应该为exist,github源码也有对应的错误:https://github.com/greyli/sayhello/blob/master/test_sayhello.py#L27 ,请确认。

回头我给github的sayhello提交个PR。

5.3.3 的建议

5.3.3 创建数据库和表这一章(145 页),

第一个注意下面, 通过下面的方式可以查看模型对应的 SQL 模式(建表语句)

>>> from sqlalchemy.schema import CreateTable
>>> print(CreateTable(Note.__table__))

CREATE TABLE note (
        id INTEGER NOT NULL,
        body TEXT,
        PRIMARY KEY (id)
)

此处应该先 from app import Note, , 否则会得到 NameError: name 'Note' is not defined, 但是书中上下文并没有提到这个。对于 Python 初学者可能不太友好。

环境

  • Python版本:3.6.1
  • Flask版本:1.0.2
  • 操作系统:windows 10

5.62结迁移数据库

期望的行为

生成迁移环境和更新数据库按照书中代码没有效果

在这里给出相关代码

实际情况

“”“生成迁移脚本”“”
flask db revison -m "create note timestamp"
“”“更新数据库”“”
flask db upgrade head
不知道这样对不对

环境

  • Python版本:3.63
  • Flask版本:1.02
  • 操作系统:window

勘误,电子书「10.3.4 使用OAuth认证」-「代码清单10-17」代码错误

豆瓣电子书,「10.3.4 使用OAuth认证」章节中的「代码清单10-17」:

代码清单10-17 todoism/apis/v1/auth.py:验证令牌

from itsdangerous import TimedJSONWebSignatureSerializer as Serializer, BadSigna-ture, SignatureExpired

def validate_token(token):
    # ...

BadSigna-ture应该为BadSignature,多了一个-,感觉是英文书写移行规则引起的,可能纸质版也有相同的错误,请确认。另外已确认github仓库的源码没有这个错误。

PS:这个豆瓣用全文搜索索引不到了...

helloflask/demos/form 目录下 app.py 有代码错误

书中相关内容在第 4 章 4.1 处,。

github 上关于 /html 的路由函数定义如下:

@app.route('/html', methods=['GET', 'POST'])
def html():
    form = LoginForm()
    if form.validate_on_submit():
        username = form.username.data
        flash('Welcome home, %s!' % username)
        return redirect(url_for('index'))
    return render_template('pure_html.html', form=form)

此处代码和后面内容中的 /basic 的相关代码是一样的, 但是 pure_html.html没有用到 WTForms, 根据书中上下文判断, 4.1 节是讲直接使用 HTML 编写表单的情况。所以此处的代码应该如下:

@app.route('/html', methods=['GET', 'POST'])
def html():
    if request.method == 'POST':
        username = request.form.get('username')
        flash(f'Welcome home, {username}')
    return render_template('pure_html.html')

101 页图错误

101 页的图 3-5, 图内的 url 是 localhost:5000/what, 但是上文所写的 url 是 localhost:5000/nothing

书籍代码勘误

你好作者,我刚买了你的书发现第二章36页,URL变量转换器代码的修饰器

@app.route('goback/int:year')
def go_back(year):
return '

Welcome to %d!<!p>' % (2018-year)

应该在里面加一个 /
@app.route('/goback/int:year')

url_for模板中的参数问题

感谢作者详细的讲解 大部分内容都很棒
可能是因为时间紧迫 有些地方存在容易让人疑惑
8.3.1分页显示文章列表
为了便于重用,我们可以创建一个pager()宏:

{% macro pager(pagination, fragment='') %}
<nav aria-label="Page navigation">
  <ul class="pagination">
    <li class="page-item {% if not pagination.has_prev %}disabled{% endif %}">
      <a class="page-link" href="{{ url_for(request.endpoint, page=pagination.prev_num, **kwargs) + fragment if pagination.has_prev else '#'}}">
      <span aria-hidden="true">&larr;</span> Newer
      </a>
    </li>
    <li class="page-item class="next {% if not pagination.has_next %}disabled{% endif %}">
      <a class="page-link" href="{{ url_for(request.endpoint, page=pagination.next_num, **kwargs) + fragment if pagination.has_next else '#'}}">
      Older <span aria-hidden="true">&rarr;</span>
      </a>
    </li>
  </ul>
</nav>
{% endmacro %}

请问在宏内部调用url_for() 为什么传入的参数里有**kwargs
这是形参不定长参数 为什么会写在传入的实参中?

1.2 Hello,Flask!中的笔误

1.2小节最后面一段“对于简单的程序来说,程序的主模块一般命令为app.py。”,其中命令是不是应为命名

第一章page54 'say_hello'是否笔误?

def greet(name):
    return 'Hello %s!' % name
如果URL含有动态部分,那么我们需要在url_for()函数里传入相应的参数,以下面的视图函数为例:
这时使用url_for('say_hello',name='Jack')得到的URL为“/hello/Jack”。

是不是笔误呢,say_hello哪里来得,应该是url_for('greet',name='Jack')
还有,不是说用python3写得吗,%s作为占位符应该是2的写法吧
请指导:)

3.3.1对include的表述有疑问

作者你好,第88页章节3.3.1的第1个提示下面的第二段:我们使用include标签来插入一个局部模板
这里我查阅了官方文档对include的表述是:The include statement
这句是不是翻译为include语句会更好一些呢

windows pycharm运行一直报错

报错信息如下:
Error: Could not locate a Flask application. You did not provide the "FLASK_APP" environment variable, and a "wsgi.py" or "app.py" module was not found in the current directory.
1)set FLASK_APP=app.py也解决不了问题
2)app.py在demo/hello文件件下面
3)貌似将app.py目录挪到项目根目录下面就没有报错。
麻烦看一下谢谢!

第5章代码清单5-11后面在flask shell中的一段代码

king = Writer(name='Stephen King')
carrie = Book(name='Carrie')
it = Book(name='IT')
db.session.add(king)
db.session.add(carrie)
db.session.add(it)
db.session.commit()

carrie.writer = king
carrie.writer
king.books
it.writer = writer
king.books

这里的 it.writer = writer
应该是 it.writer = king 吧?
然后两行king.books都报错
AttributeError: 'Book' object has no attribute 'name'

勘误,电子书「10.3.6 资源的反序列化」-「3.处理错误响应」拼写错误

豆瓣电子书。「10.3.6 资源的反序列化」章节,原文:

3.处理错误响应
和其他程序一样,Todoism使用app.error_handler装饰器注册了全局错误处理器。但是...

app.error_handler应该为app.errorhandler,仅此一处。可能纸质版也会有相同的错误(拼写错误?),请确认。

PS:豆瓣能全文搜索真是方便,哈哈。

纸书3.2.5第87页通过模板环境对象添加全局属性有疑问

  • 章节位置(比如3.3.2):3.2.5 在87页第1个注意下面的第一段文字,倒数第二句部分
  • 页数(如果是纸书的话):87
  • 错误文字::这通过向对应的字典属性中添加一个键值对实现,传入模板的名称作为键,对应的函数对象或变量作为值。
  • 正确文字:这通过向对应的字典属性中添加一个键值对实现,传入函数对象或变量的名称作为键,对应的函数对象或变量作为值。
  • 备注:查阅官方文档后发现这里的键就是值名称的字符串表示,表述为‘’用模板的名称‘’容易引起读者歧义和不解。官方文档实例代码如下:
    def reverse_filter(s): return s[::-1] app.jinja_env.filters['reverse'] = reverse_filter

第3章 宏 p89页 下面一句话没看懂

“如果我们想在导入的宏中使用第一个列表中的2、3、4项,就需要...”
请问,这句话没有明白"第一个列表"是指哪个?
看了两遍没看明白o(╥﹏╥)o~

第12章的源码在哪里

第12章 《自动化测试》里面说道:

...本书第二部分的实例程序的测试代码均在名称为testing的标签中提交,你可以通过git checkout testing命令签出...

但是,实际上并没有 testing 这个 tag。。。
请问要怎么找到这部分代码呢?

纸书第83页表3-5函数有笔误

  • 章节位置(比如3.3.2):3.2.3 表3-5 第2行
  • 页数(如果是纸书的话):83
  • 错误文字:default(value, default=u", boolean=False)
  • 正确文字:default(value, default="u", boolean=False)
  • 备注:default值应使用字符串表示,漏掉了前面的引号

第2章 2.3.4 session如何用作安全的用户验证疑问

有2个疑问
1.session这里是使用秘钥构建的签名,可以防止被别人篡改,我对于别人篡改我的session的攻击方式有疑问?如果别人篡改我的session,那么除了拒绝我享受服务,还有没有什么方法是我收到损害?

2.文章中说,不能在session中存放敏感信息,因为加密后的数据可以借助工具轻易读取(即使不知道秘钥)。那么如果别人拿到了我的session,他就能通过我的session进行我的账户权限的操作了,无需读取我的密码什么的啊?那又有什么不能在session中存放敏感信息的必要呢?

pycharm不能运行flask

问题:按照下图设置pycharm,不能正确运行flask (python2.7.13,pycharm版本5.0.3)

第2章 2.2.3 在Flask中处理请求 3 URL转换器 any的使用疑问

我的理解any这里是用作枚举类型之用
实际运行以后,我发现这里any的取值只能是正则表达式解析为string的字母才行
(1)如果我想传入枚举类型的,数字表示的字符串有没有办法实现?
(2)如果我想传入枚举类型的,数字表示的字符串,通过类型转换解析为int类型有没有办法实现?

150 页代码错误

150 页第 1 个代码块如下:

>>> Note.query.filter(Note.body='SHAVE').first()
<Note u'SHAVE'>

此处使用 filter() 查询, 应该使用 ==, 所以代码应为:

>>> Note.query.filter(Note.body=='SHAVE').first()

第一章 page14页,运行不了程序,

c:\helloflask>pipenv shell
Launching subshell in virtual environment鈥?Microsoft Wind
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。

(helloflask-_7dot6hq) c:\helloflask>cd demos\hello

(helloflask-_7dot6hq) c:\helloflask\demos\hello>flask run

之后就报错,如下:

  • Environment: development

  • Debug mode: on

  • Restarting with stat
    Traceback (most recent call last):
    File "C:\ProgramData\Anaconda2\Lib\runpy.py", line 1

    "main", fname, loader, pkg_name)
    File "C:\ProgramData\Anaconda2\Lib\runpy.py", line 7
    exec code in run_globals
    File "C:\Users\Administrator.virtualenvs\helloflask
    e_main_.py", line 9, in
    File "c:\users\administrator.virtualenvs\helloflask
    s\flask\cli.py", line 894, in main
    cli.main(args=args, prog_name=name)
    File "c:\users\administrator.virtualenvs\helloflask
    s\flask\cli.py", line 557, in main
    return super(FlaskGroup, self).main(*args, **kwarg
    File "c:\users\administrator.virtualenvs\helloflask
    s\click\core.py", line 697, in main
    rv = self.invoke(ctx)
    File "c:\users\administrator.virtualenvs\helloflask
    s\click\core.py", line 1066, in invoke
    return process_result(sub_ctx.command.invoke(sub
    File "c:\users\administrator.virtualenvs\helloflask
    s\click\core.py", line 895, in invoke
    return ctx.invoke(self.callback, **ctx.params)
    File "c:\users\administrator.virtualenvs\helloflask
    s\click\core.py", line 535, in invoke
    return callback(*args, **kwargs)
    File "c:\users\administrator.virtualenvs\helloflask
    s\click\decorators.py", line 64, in new_func
    return ctx.invoke(f, obj, *args[1:], **kwargs)
    File "c:\users\administrator.virtualenvs\helloflask
    s\click\core.py", line 535, in invoke
    return callback(*args, **kwargs)
    File "c:\users\administrator.virtualenvs\helloflask
    s\flask\cli.py", line 771, in run_command
    threaded=with_threads, ssl_context=cert)
    File "c:\users\administrator.virtualenvs\helloflask
    s\werkzeug\serving.py", line 812, in run_simple
    reloader_type)
    File "c:\users\administrator.virtualenvs\helloflask
    s\werkzeug_reloader.py", line 275, in run_with_reload
    sys.exit(reloader.restart_with_reloader())
    File "c:\users\administrator.virtualenvs\helloflask
    s\werkzeug_reloader.py", line 132, in restart_with_re
    close_fds=False)
    File "C:\ProgramData\Anaconda2\Lib\subprocess.py", l
    return Popen(*popenargs, **kwargs).wait()
    File "C:\ProgramData\Anaconda2\Lib\subprocess.py", l
    errread, errwrite)
    File "C:\ProgramData\Anaconda2\Lib\subprocess.py", l

    startupinfo)
    TypeError: environment can only contain strings

有时候会报这个错误,如下:

(helloflask-_7dot6hq) c:\helloflask>cd demos\hell

(helloflask-_7dot6hq) c:\helloflask\demos\hello>fl
Usage: flask run [OPTIONS]

Error: Could not locate Flask application. You did
ironment variable.

For more information see http://flask.pocoo.org/do

折腾了几个小时,就是运行不了- -
python版本:Python 2.7.14 |Anaconda custom (64-bit)| (default, Mar 27 2018, 12:30:5
.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
win7系统

第七章留言板无法运行,显示import error

关于第七章中的目录结构和 python的包含机制
我没有看特别懂,自己按照这个目录照抄的时候,也发现并不能运行,死在

import views 这里就报错了.
已经
export FLASK_APP=demo
flask run了

纸书89页3.3.2有文字笔误

  • 章节位置(比如3.3.2):3.3.2 注意文本的最后一行
  • 页数(如果是纸书的话):89
  • 错误文字:在不显示声明传入上下文的情况下
  • 正确文字:在不显式声明传入上下文的情况下
  • 备注:笔误

pipenv 报错

环境:python2.7.13
错误描述:第一次安装pipenv成功,且创建了虚拟环境。第二次执行pipenv shell时候出现图片所示错误。

第三章form 的app.py无法正确运行

class MultiUploadForm(FlaskForm):
photo = MultipleFileField('Upload Image', validators=[DataRequired()])
submit = SubmitField()

FlaskForm里面并没有MultipleFileField(),只有FileField()

修改成photo = FileField('Upload Image', validators=[DataRequired()])
才可以运行

纸书第51页代码缩进错误

  • 章节位置(比如3.3.2):2.3.4 在51页的第一段代码
  • 页数(如果是纸书的话):51
  • 错误文字:代码第9行( response = '

    Hello, %s!

    ' % name)开始缩进错误
  • 正确文字:第9行及以下均应往左缩进4个空格
  • 备注:demo文件中的代码是正确的

第5章 第153页 5-5代码 请教

@app.route('/')
def index():
    form = DeleteForm()
    notes = Note.query.all()
    return render_template('index.html', notes=notes, form=form)

请教一下,这段代码中的 form = DeleteForm() 这一行将DeleteForm()这个类实例化为form,没有看明白,渲染index.html模板的时候是没用到吧?

34 页插图有个小错误

书的 34 页图 2-5 里面浏览器中访问的 path 是 /foo, 这个路由在程序里面是定义了的, 此处应该是上文的 /nothing

邮件

状态 信息 收到最后一次活动 打开 点击
处理 致:[email protected] 你好,世界! 2018/10/10上午9:03 UTC + 00:00 0 0

sendgrid 不给发邮件?????

pipenv报错

(helloflask-hUtz0ICQ) D:\helloflask>pipenv update
Running $ pipenv lock then $ pipenv sync.
Locking [dev-packages] dependencies...
Locking [packages] dependencies...
v\utils.py", line 402, in resolve_deps
req_dir=req_dir
File "e:\python36\lib\site-packages\pipenv\utils.py", line 250, in actually_resolve_deps
req = Requirement.from_line(dep)
File "e:\python36\lib\site-packages\pipenv\vendor\requirementslib\models\requirements.py", line 704, in from_line
line, extras = _strip_extras(line)
TypeError: 'module' object is not callable

纸书46页第二段代码有笔误

  • 章节位置(比如3.3.2):2.3.2 在46页的第二段代码
  • 页数(如果是纸书的话):46
  • 错误文字:return jsonify({name: 'Grey Li', gender: 'male'})
  • 正确文字:return jsonify({'name': 'Grey Li', 'gender': 'male'})
  • 备注:字典中的键未加引号,将是未定义的变量。应为笔误

纸书101页3.4.4错误处理器内容有疑问

纸书章节3.4.4第101页原文第一段文本:
如果你不想手动编写错误页面的内容,可以将这些信息传入错误页面模板,在模板中用它们构建错误页面。不过需要注意的是,传入500错误处理器的是真正的异常对象,通常不会提供这几个属性,你需要手动编写这些值。
这一段有3个疑问:
1.如何将异常类的常用属性信息传入错误页面模板?
2.上文代码示例构建的是404错误处理器,这里写的又是500错误处理器,此处是否有笔误?
3.为何传入错误处理器的真正的异常对象不会提供异常类的常用属性,我的理解是传入错误处理函数的真正的异常对象应该是异常类的实例,应该是可以提供异常类的实例属性的,还是说这里提到的异常类的常用属性是类属性?如果是类属性应该也是可以通过实例来访问的。

初学python不久,个别理解可能有偏差,希望作者不吝赐教。

设置环境变量后报错

环境:python2.7

过程:新建.flaskenv文件,写入环境变量FLASK_ENV=development,运行flask run

结果:TypeError: environment can only contain strings

7.3.2 快捷渲染表单 中的示范代码有误

这一节中有一段示范代码

{% extends 'base.html' %}
{% from 'bootstrap/form.html' import render_form %}

{% block content %}


{{ render_form(form),action=request.full_path}}

{% endblock %}

对比github上源代码,其中应该是{{ render_form(form, action=request.full_path) }}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.