Comments (6)
@DurandA Hi. That is a good question. I am still in search for a better way to implement this. Currently, the validation is done in resource processing and Model validations, for example, when I PATCH users:
- I handle PATCH request in resources.py: https://github.com/frol/flask-restplus-server-example/blob/master/app/modules/users/resources.py#L116-L152
- I iterate over the operations
- In the iteration function:
- I check for current user password: https://github.com/frol/flask-restplus-server-example/blob/master/app/modules/users/resources.py#L168-L179
- or just blindly try to set the passed fields (expecting an exception from Model validator if the value is not valid): https://github.com/frol/flask-restplus-server-example/blob/master/app/modules/users/resources.py#L181-L208 (notice
setattr
at the end)
from flask-restplus-server-example.
@DurandA Please, read this short article on the PATCH matter: http://williamdurand.fr/2014/02/14/please-do-not-patch-like-an-idiot/. After you read it, you should understand that the classes inherited from PatchJSONParameters
have only 3 (three) constant fields: op
, path
, and value
. Thus, there won't be any name
field. You may try to use @validates_schema
(it should work in theory, but I haven't tried it myself):
@validates_schema
def validate_name(self, data):
if data['op'] == 'replace' and data['path'] == '/name' and len(data['value']) < 3:
raise ValidationError('Too short!', 'name')
NOTE: This is just a workaround since there must be a nicer way to implement this.
from flask-restplus-server-example.
Thank you @frol for your support and detailed answers. 😃 You should get paid for this!
The article from William Durand is indeed excellent reading. I think that the workaround is good enough.
I wish that your patches (especially marshmallow integration) will be merged into Flask-RESTPlus one day.
from flask-restplus-server-example.
Just for your info, I have updated the above code snippet since there was a bug in it.
from flask-restplus-server-example.
@DurandA As to the patches, I wish I could merge them, but writing my patches I had only one thing in mind, that is to support marshmallow
. However, merging my patches back would require some work on backwards compatibility with everything else. Some time ago I have found Flask-apispec, which seems to be much closer to what I really needed since it is a part of marshmallow
/webargs
/apispec
family. Unfortunately, it seems to be abandoned though it also seems to be feature complete.
from flask-restplus-server-example.
@DurandA I would like to let you know that @khorolets refactored resources.py quite a bit, so I encourage you to take a look at the current state of this piece of art ;)
In particular, PatchJSONParameters
was improved, so you can now implement @classmethod
s replace
/test
/etc to validate user input. To get a sense of it, take a look at Users' Parameters: https://github.com/frol/flask-restplus-server-example/blob/master/app/modules/users/parameters.py#L63-L114
from flask-restplus-server-example.
Related Issues (20)
- auth failed with access_token from Client Credentials Grant HOT 3
- Werkzeug version is incompatible HOT 2
- [QUESTION] How can i work with SQLALCHEMY_BINDS? HOT 2
- How Can I Disable OAuth2 Module? HOT 2
- How to display Chinese in API Response? HOT 2
- How can add my model in API for this flame? HOT 1
- How to implement filter query request for the framework? HOT 4
- How can use Mysql DB Instead Sqlite? HOT 2
- How to run the application as a service? HOT 1
- How can to custom json response for this project? HOT 3
- [QUESTION] Best place to implement implement expanding of returned objects/schema's HOT 2
- why the project backend run failed on linux(centos7) ? HOT 4
- How can I upload or update a file field? HOT 1
- [Question] Oauth: How to use other Oauth system? HOT 2
- How can you use schemas in this project with celery HOT 4
- [Question] Best practice for nested data in POST HOT 6
- File upload works as documented, but SPA's also can upload file's via JSON in body HOT 1
- Porting to Flask-RESTX? HOT 1
- Question: what is suggested way to add endpoints to respond web pages ? HOT 2
- ModuleNotFoundError: No module named 'config' HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from flask-restplus-server-example.