返回200,但是没有写入数据库,AttributeError: can't set attribute

来源:4-6 生成用户数据

夏目鲸鱼

2018-08-25

报错相关的代码:

@api.route('/register', methods=['POST'])
def create_client():
    data = request.json
    form = ClientForm(data=data)   # 在实例化ClientForm的时候是否会自动调用自带的验证方法validate_type

    if form.validate():
        print('127890~~~~~~~')
        promise = {
            ClientTypeEnum.USER_EMAIL: __register_user_by_email
        }
        print(form.type.data)

        promise[form.type.data]()
    return 'success'

def __register_user_by_email():
    form = UserEmailForm(data=request.json)
    if form.validate():
        print(form.nickname.data)
        User.register_by_email(form.nickname.data,
                               form.account.data,
                               form.secret.data)
    else:
        print('validation error~')
  
class UserEmailForm(Form):
    account = StringField(validators=[Email('invalidate email')])
    secret = StringField(validators=[DataRequired(), Regexp(r'^[A-Za-z0-9_*&$#@]{6,22}$')])
    nickname = StringField(validators=[DataRequired(), length(min=2, max=22)])

    def validate_account(self, value):
        if User.query.filter_by(email=value.data).first():
            raise ValidationError()

POST请求:
{"account":"777@qq.com", "secret":"123456", "type":100, "nickname":"natume"}
服务器响应:
127890~~~~~~~
ClientTypeEnum.USER_EMAIL
natume
123456
127.0.0.1 - - [25/Aug/2018 10:57:31] "POST /v1/client/register HTTP/1.1" 500 -
Traceback (most recent call last):
  File "/Users/renyiguang/.local/share/virtualenvs/ginger-NkPelh6d/lib/python3.6/site-packages/flask/app.py", line 2301, in __call__
    return self.wsgi_app(environ, start_response)
  File "/Users/renyiguang/.local/share/virtualenvs/ginger-NkPelh6d/lib/python3.6/site-packages/flask/app.py", line 2287, in wsgi_app
    response = self.handle_exception(e)
  File "/Users/renyiguang/.local/share/virtualenvs/ginger-NkPelh6d/lib/python3.6/site-packages/flask/app.py", line 1733, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "/Users/renyiguang/.local/share/virtualenvs/ginger-NkPelh6d/lib/python3.6/site-packages/flask/_compat.py", line 35, in reraise
    raise value
  File "/Users/renyiguang/.local/share/virtualenvs/ginger-NkPelh6d/lib/python3.6/site-packages/flask/app.py", line 2284, in wsgi_app
    response = self.full_dispatch_request()
  File "/Users/renyiguang/.local/share/virtualenvs/ginger-NkPelh6d/lib/python3.6/site-packages/flask/app.py", line 1807, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/Users/renyiguang/.local/share/virtualenvs/ginger-NkPelh6d/lib/python3.6/site-packages/flask/app.py", line 1710, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/Users/renyiguang/.local/share/virtualenvs/ginger-NkPelh6d/lib/python3.6/site-packages/flask/_compat.py", line 35, in reraise
    raise value
  File "/Users/renyiguang/.local/share/virtualenvs/ginger-NkPelh6d/lib/python3.6/site-packages/flask/app.py", line 1805, in full_dispatch_request
    rv = self.dispatch_request()
  File "/Users/renyiguang/.local/share/virtualenvs/ginger-NkPelh6d/lib/python3.6/site-packages/flask/app.py", line 1791, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/Users/renyiguang/Project/flask-api/ginger/app/api/v1/client.py", line 22, in create_client
    promise[form.type.data]()
  File "/Users/renyiguang/Project/flask-api/ginger/app/api/v1/client.py", line 32, in __register_user_by_email
    form.secret.data)
  File "/Users/renyiguang/Project/flask-api/ginger/app/models/user.py", line 28, in register_by_email
    user.password = secret
AttributeError: can't set attribute


写回答

1回答

7七月

2018-08-29

你先把错误解决了啊,没写入这个肯定是因为 这里代码写错了呀。

1
4
夏目鲸鱼
回复
7七月
对不起,是我自己为写错了
2018-09-05
共4条回复

Python Flask高级编程之RESTFul API前后端分离精讲

RESTFul+权限管理+token令牌+扩展flask=提升编程思维

2037 学习 · 359 问题

查看课程