小编Ana*_*ees的帖子

更新 sqlalchemy orm 时的验证不起作用

我有这门课:

class User(base):
    __tablename__='User'
    name = Column(.......

    def __init__(self, name):
        self.name = name

    @validates('name')
    def validate_name(self, key, name):
        if blah blah blah:
            return name
        else:
            raise exception.....
Run Code Online (Sandbox Code Playgroud)

创建一个新用户并将他存储在数据库中...

if __name__ == '__main__':
    user = User('foo')
    session.add(user)
    session.commit() #validation works here
Run Code Online (Sandbox Code Playgroud)

更新用户时:

if __name__ == '__main__':
    user = session.query(User).filter_by(name=='foo').first()
    user.name = 'bar'
    session.add(user)
    session.commit() #validation not working here
Run Code Online (Sandbox Code Playgroud)

存储新用户时,验证有效,但更新现有用户时,验证无效

问:如何在使用@validates 更新其值时验证表列?

谢谢 :)

python sqlalchemy flask-sqlalchemy

9
推荐指数
1
解决办法
464
查看次数

Wtforms,多选文件上传

我有一个包含姓名和图片的表格

MyForm的:

    name = TextField(
    u'name',
    validators=[
        validators.DataRequired(),
        validators.Length(min=1, max=25)
    ]
)   

    pictures = FileField(
    u'pictures',
    validators=[
        FileRequired(),
        FileAllowed(['jpg', 'png'], 'Images only!')
    ]
)
Run Code Online (Sandbox Code Playgroud)

Jinja2模板:

{% from "_form_helpers.tpl" import render_field %}
<form method="post" action="" enctype="multipart/form-data">
  <dl>
    {{ render_field(form.name) }}
    {{ render_field(form.pictures) }}
  </dl>
  <p>{{ form.submit }}
</form>
Run Code Online (Sandbox Code Playgroud)

我想在一个字段中上传一个或多个图片(多选).

这该怎么做?

谢谢..

python flask wtforms flask-wtforms

6
推荐指数
2
解决办法
4638
查看次数

从自定义Django用户模型中删除密码

如何在自定义用户模型中删除users表和User类中的密码?

我正在使用django-rest-framework令牌认证,所以我不需要密码字段.

这是我的模型:

class CustomUserManager(BaseUserManager):

    def create_user(phone, name=None):
        return User.objects.create(
            name=name, phone=phone)

    def create_superuser(name, phone=None):
        pass

class User(AbstractBaseUser):
    """
    Custom django User model.
    """
    name = models.CharField(max_length=30,
                        null=True, validators=[validate_name])

    phone = PhoneNumberField(unique=True, blank=False, null=False)

    objects = CustomUserManager()

    USERNAME_FIELD = 'phone'
    REQUIRED_FIELDS = []
Run Code Online (Sandbox Code Playgroud)

python django django-models django-users django-rest-framework

4
推荐指数
2
解决办法
1789
查看次数

如果使用“AllowAny”权限类,如何防止 Django Rest Framework 验证令牌?

让我先向您展示我的代码:

settings.py

....
DEFAULT_AUTHENTICATION_CLASSES': (
    'rest_framework.authentication.TokenAuthentication',
),
'DEFAULT_PERMISSION_CLASSES': (
    'rest_framework.permissions.IsAuthenticated',
)
....
Run Code Online (Sandbox Code Playgroud)

我的my_view.py

@api_view(['POST'])
@permission_classes((AllowAny,))
def say_hello(request):
    return Response("hello")
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我默认使用令牌身份验证来保护我的其他 API,但是当我在 中添加令牌标头时say_hello,Django Rest Framework 也会检查令牌是否有效,即使我添加AllowAny权限类也是如此。

我的问题是,如果令牌标头存在于say_hello?中,如何使 Django Rest Framework 忽略检查令牌?这样做有什么安全考虑吗?

谢谢。

python django django-rest-framework

4
推荐指数
1
解决办法
1340
查看次数

用相同的装饰器"烧瓶"路由到view_func

假设我有这条路线:

app.add_url_rule('/',
                  view_func=index,
                  methods=['GET'])

app.add_url_rule('login',
                  view_func=login,
                  methods=['GET', 'POST'])

@validate_access()
def index():
    #......

@validate_access()
def login():
    #......
Run Code Online (Sandbox Code Playgroud)

我有2个端点与相同的装饰"@validate_access".当我运行这个代码时,我得到了

AssertionError: View function mapping is overwriting an existing endpoint function:    wrapperAssertionError: View function mapping is overwriting an existing endpoint function: wrapper
Run Code Online (Sandbox Code Playgroud)

我不知道它是不是一个bug.但如果有解决方案,请通知我.

谢谢 :)

python decorator flask python-2.7

3
推荐指数
1
解决办法
3445
查看次数

带有HTML5视频的华丽弹出窗口

如何使用magnific-popup从我的服务器检索和弹出html5视频,而不是从youtube,vimo等获取视频?

<video width="500" height="350" controls>
    <source src="/static/video/bunny.mp4" type="video/mp4" />
        Your browser does not support this video format.
</video>
Run Code Online (Sandbox Code Playgroud)

谢谢。

magnific-popup

3
推荐指数
1
解决办法
1万
查看次数

对rails中的attr_accessor和attr_accessible感到困惑

这是一个简单的注册应用程序

schema.rb

create_table "users", :force => true do |t|
t.string   "email"
t.string   "password_hash"
t.string   "password_salt"
t.datetime "created_at",    :null => false
t.datetime "updated_at",    :null => false
Run Code Online (Sandbox Code Playgroud)

User.rb

attr_accessible :email, :password, :password_confirmation
attr_accessor :password
before_save :encrypt_password
validates_confirmation_of :password
validates_presence_of :password, :on => :create
validates_presence_of :email
validates_uniqueness_of :email
.
.
.
Run Code Online (Sandbox Code Playgroud)

为什么在attr_accessible和attr_accessor中都使用密码?

当我删除attr_accessor:password时,在rails控制台中,我在执行时遇到错误:

user = User.new
user.password # => no method error
Run Code Online (Sandbox Code Playgroud)

但是当我执行这个:

user = User.new
user.email # => nil
Run Code Online (Sandbox Code Playgroud)

这意味着user.email在没有在attr_accessor中添加的情况下工作,为什么?!!

这也有效:

user = User.new
user.password_confirmation # => nil
Run Code Online (Sandbox Code Playgroud)

但当我删除:

validates_confirmation_of :password
Run Code Online (Sandbox Code Playgroud)

它不会起作用,为什么?

ruby ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1

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