标签: flask-peewee

Flask-Admin ModelView自定义验证?

我正在研究Flask-Admin和PeeWee Backend ModelView(但我的问题也可能适用于SQLAlchemy后端),并且我在文档或示例中找不到两件事:

(1).当我的模型有一个唯一的字段并且我测试/尝试复制它时,我得到一个默认的Flask崩溃屏幕,其中显示消息:"IntegrityError:column username not unique"

我正在https://github.com/mrjoes/flask-admin/blob/master/examples/peewee/simple.py中测试PeeWee示例,我将第21行更改为"username = peewee.CharField(max_length = 80,unique = True)"

然后我尝试使用"username"="user1"添加两个用户.

是否有礼貌的方式回到编辑屏幕(甚至列表屏幕,任何管理员屏幕都会这样做),但有一个受控的错误消息?我不需要自定义错误消息,当前消息正常(IntegrityError:列用户名不是唯一的).但我不喜欢崩溃屏幕.

我可以设置/使用Flask的默认500页,但之后我将完全退出Flask-Admin流程,用户将"错过"他刚输入的数据.

我想回到编辑屏幕,但有一些警报/错误消息.我不介意扩展模板,这不是问题.但我找不到一个拦截错误并正确处理它的地方.有什么建议?

(2):

我还需要一种在流程中添加一些预保存验证的方法.例如,我是一个具有initial_date和final_date的实体的编辑形式,我想在保存之前确保final_date大于initial_date或为null.

我可以通过javascript执行此客户端,扩展该实体的编辑模板并在尾部块中添加我的验证脚本(并拦截form.submit事件).

但是,如果我的验证需要一些服务器端的最后一分钟验证呢?是否有任何方式/地方拦截流程并添加我的验证,运气好的话,以问题1中讨论的相同方式抛出我的错误信息?

提前致谢,

问候,

python validation flask-admin flask-peewee

8
推荐指数
1
解决办法
5401
查看次数

AttributeError:'SelectQuery'对象没有属性'is_active'

我正在尝试通过遵循Flask Mega教程来学习Peewee ORM与Flask的结合.在本教程的第5部分中,我使用OpenID创建了一个登录.在克服了一堆障碍之后,我现在在下面的行中粘贴的函数中得到一个AttributeError : login_user(user, remember = remember_me).

@oid.after_login
def after_login(resp):
    if resp.email is None or resp.email == "":
        flash('Invalid login. Please try again.')
        return redirect(url_for('login'))
    user = User.select().where(User.email == resp.email)    
    if user.wrapped_count() == 0:
        nickname = resp.nickname
        if nickname is None or nickname == "":
            nickname = resp.email.split('@')[0]
        user = User(nickname = nickname, email = resp.email, role = models.ROLE_USER)
        user.save()
    remember_me = False
    if 'remember_me' in session:
        remember_me = session['remember_me']
        session.pop('remember_me', None)
    login_user(user, remember …
Run Code Online (Sandbox Code Playgroud)

python attributeerror flask peewee flask-peewee

5
推荐指数
1
解决办法
3308
查看次数

烧瓶 - 小便能做迁移吗?

我想使用flask peewee作为关系数据库(MySQL)的ORM,但我的问题是模型结构的变化......比如为模型添加新属性(这意味着db中的列).我想知道我是否可以自动执行此操作而无需手动编写SQL?

python flask flask-peewee

5
推荐指数
3
解决办法
3270
查看次数

如何从 Peewee 中的批量插入中获取 ID?

如何ids从 Peewee 中的批量插入中获取?

我需要返回插入的 id 来创建一个新的 dict 数组,如下所示:

a = [{"product_id": "inserted_id_1", "name": "name1"}, {"product_id": "inserted_id_2", "name": "name1"}]
Run Code Online (Sandbox Code Playgroud)

然后我需要使用批量插入它,例如:

ids = query.insertBulk(a)
Run Code Online (Sandbox Code Playgroud)

反过来,最后一个查询应该返回我的新 ID 以进行进一步的类似插入。

python python-3.x peewee flask-peewee

5
推荐指数
1
解决办法
903
查看次数

Flask无法读取ElasticBeanstalk上的Authorization标头

编辑:进一步阅读两个解决方案。

我已将Flask应用程序部署到AWS ElasticBeanstalk。应用无法读取请求中的“ 授权 ”标头。

错误日志报告:

KeyError: 'HTTP_AUTHORIZATION'
Run Code Online (Sandbox Code Playgroud)

错误追踪至:

@application.before_request
    def before_request():
       try:
          token = request.headers['Authorization'].split(' ')[-1]
          user = User.get(token=token)
          g.user = user
       except ValueError as e:
        abort(401)
Run Code Online (Sandbox Code Playgroud)

应用程序目录:

app/
    .elasticbeanstalk
    application.py
    virt
    .ebignore
    requirements.txt
Run Code Online (Sandbox Code Playgroud)

环境配置将WSGIPath设置为application.py

aws:elasticbeanstalk:container:python:
 NumProcesses: '1'
 NumThreads: '15'
 StaticFiles: /static/=static/
 WSGIPath: application.py
Run Code Online (Sandbox Code Playgroud)

环境运行Python 3.6和以下组件:

Click==7.0
Flask==1.0.2
Flask-RESTful==0.3.7
itsdangerous==1.1.0
Jinja2==2.10
MarkupSafe==1.1.1
peewee==3.9.2
psycopg2==2.7.7
python-dotenv==0.10.1
pytz==2018.9
six==1.12.0
Werkzeug==0.14.1
Run Code Online (Sandbox Code Playgroud)

还有其他要求吗?

尝试的(失败的)解决方案:

我为此花了很多时间,并尝试配置WSGIPassAuthorization,(根据此处和其他地方的建议),但是,我没有成功。

应用程序目录包含解决方法:

app/
    .elasticbeanstalk
    .ebextensions/
        wsgi_custom.config
    application.py
    virt
    .ebignore …
Run Code Online (Sandbox Code Playgroud)

wsgi amazon-web-services python-3.x flask-peewee amazon-elastic-beanstalk

5
推荐指数
1
解决办法
364
查看次数

与烧瓶和Peewee的分页

我正在尝试使用paginate查询的结果.我想使用的功能object_list中的.FlaskPeeweeplayhouse.flask_utils

您可以看到object_list似乎非常简单的示例,以下代码是我正在努力工作的代码:

from flask import Flask
from playhouse.flask_utils import object_list
from peewee import *
from database import *

@app.route("/items/")                                                         
def items():                                                                  
    all_items = Quote.select()                                                     
    return object_list("items.html", all_items) 
Run Code Online (Sandbox Code Playgroud)

该模板items.html包含以下内容:

<p>Hello world</p>                                               
{% for item in all_items %}                                                       
    <p>{{ item.text }}</p>                                                    
{% endfor %}                                                                    

{% if page > 1 %}                                                               
    <a class="previous" href="./?page={{ page - 1 }}">Previous</a>              
{% endif %}                                                                     
{% if pagination.get_pages() > page %}                                          
    <a class="next" href="./?page={{ page + …
Run Code Online (Sandbox Code Playgroud)

python pagination flask peewee flask-peewee

2
推荐指数
1
解决办法
1727
查看次数

有没有办法通过 mixin 设置 peewee 字段?

我正在尝试设置一组可重用的数据模型,可以将其包含在多个应用程序中,如下所示(我在这里使用用户作为示例,但实际的数据模型是库的 peewee 后端Authlib):

# mixins.py

class UserMixin(peewee.Model):
    username = peewee.CharField()
    password = peewee.CharField()

    def set_password(self):
        # do stuff
    ...
Run Code Online (Sandbox Code Playgroud)

创建 mixin 后,我应该能够像这样导入它,仅定义附加字段(默认值已经来自 mixin)

# models.py

db = peewee.SqliteDatabase(config.get('DATABASE_FILE'))

class BaseModel(peewee.model):
    class Meta:
        database = db

class User(BaseModel, UserMixin):
    email = peewee.CharField()
    ...

Run Code Online (Sandbox Code Playgroud)

我见过人们用 这样做SQLAlchemy,但是当我将这个策略与 peewee 一起使用时,它似乎没有正确保存字段:

  • 如果UserMixin继承自peewee.Model,它会说“无法解析导入层次结构”(可能是因为我们peewee.Model多次导入)
  • ifUserMixin只是一个object, then peewee 似乎没有正确处理它的字段:它们最终都作为未绑定的实例并且不会保存在数据库中。

我的问题:是否有一种“官方方式”来创建带有peewee字段的可重用模型混合?

我见过其他项目(例如flask-login)使用 mixins,但这些通常是像本示例中那样的附加函数set_password,而不是定义字段本身的函数。


我有一些潜在的替代解决方案,例如

  • 在共享文件中定义模型本身,而不是 mixins,并.Meta.database为每个models.py …

python oop peewee flask-peewee

2
推荐指数
1
解决办法
384
查看次数

Flask peewee AttributeError:“ModelSelect”对象没有属性“_meta”

我有一个非常简单的设置、pipenv Flask 环境中的模型和 api 文件。我目前正在使用 peewee,并面临着从数据表获取所有结果的问题。我以前在 python 中做过这个并且工作得很好,但是不确定在 Flask 中我做错了什么。这是我的模型

from peewee import * 
import peewee as pw


db = pw.MySQLDatabase('xxxxx', host="localhost", port=3306, user='xxx', 
password="xxxxx")


class HomeCarousel(Model):
   icon = pw.CharField(100)
   header = pw.CharField(50)
   text = pw.CharField(100)
   class Meta:
      database = db
Run Code Online (Sandbox Code Playgroud)

这是我的 api 文件

from flask import Flask, g
from flask import jsonify, make_response
from playhouse.shortcuts import model_to_dict
from peewee import *
import peewee as pw
from models import *
from flask_cors import CORS

app = Flask(__name__)
cors = CORS(app, …
Run Code Online (Sandbox Code Playgroud)

python flask peewee flask-peewee

0
推荐指数
1
解决办法
5061
查看次数