我试图通过连接到Flask内置的RESTful API来使用JavaScript进行授权.但是,当我发出请求时,我收到以下错误:
XMLHttpRequest无法加载http:// myApiUrl/login.请求的资源上不存在"Access-Control-Allow-Origin"标头.因此不允许原点'null'访问.
我知道API或远程资源必须设置标题,但为什么在我通过Chrome扩展程序Postman发出请求时它可以正常工作?
这是请求代码:
$.ajax({
type: "POST",
dataType: 'text',
url: api,
username: 'user',
password: 'pass',
crossDomain : true,
xhrFields: {
withCredentials: true
}
})
.done(function( data ) {
console.log("done");
})
.fail( function(xhr, textStatus, errorThrown) {
alert(xhr.responseText);
alert(textStatus);
});
Run Code Online (Sandbox Code Playgroud) 这两个库的主要区别是什么.在可用性和功能方面
如果您已经拥有大量的模型类,那么使用flask-restLESS非常有意义,对吧?它缺乏什么功能,如果用烧瓶做的话.或者,什么是烧瓶安息给你,那个烧瓶不安全无法提供.
我的目标是为我的Web应用程序提供REST API.使用:
我需要保护对Web和REST访问的数据的访问.但是,request
在尝试连接到安全API时,我无法获得任何常规python 成功.
使用本问题末尾提供的全功能模块获得以下输出.
我设法在使用时得到正确的答案http://127.0.0.1:5000/api/v1/free_stuff
:
>>> import requests
>>> r=requests.get('http://127.0.0.1:5000/api/v1/free_stuff')
>>> print 'status:', r.status_code
status: 200 # all is fine
Run Code Online (Sandbox Code Playgroud)
尝试使用身份验证时http://127.0.0.1:5000/api/v1/protected_stuff
:
>>> from requests.auth import HTTPBasicAuth, HTTPDigestAuth
>>> r=requests.get('http://127.0.0.1:5000/api/v1/protected_stuff',
auth=HTTPBasicAuth('test', 'test')) # the same with ``HTTPDigestAuth``
>>> print 'status:', r.status_code
status: 401
>>> r.json() # failed!
{u'message': u'401: Unauthorized'}
Run Code Online (Sandbox Code Playgroud)
这是一个用于产生上述结果的虚拟功能模块:
from flask import Flask, render_template, url_for, redirect
from flask.ext.sqlalchemy import SQLAlchemy
from flask.ext.security import Security, …
Run Code Online (Sandbox Code Playgroud) python restful-authentication flask flask-security flask-restless
我正在尝试使用Heroku部署Flask应用程序.这是简单的API.与工头一起工作很棒但是在heroku上启动时我得到错误(日志在下面).
这是我的应用程序代码(我知道它只是查看一个块,但我有问题将其拆分为文件):
import flask
import flask.ext.sqlalchemy
import flask.ext.restless
app = flask.Flask(__name__)
app.config['DEBUG'] = True
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://user:password@server/db'
db = flask.ext.sqlalchemy.SQLAlchemy(app)
from sqlalchemy import Column, Integer, String, ForeignKey,\
Date, DateTime, Boolean, Float
class fruits(db.Model):
__tablename__ = 'fruits'
id = Column(Integer, primary_key=True)
name = Column(String(50),nullable=False)
calories = Column(Integer, nullable=False)
amount = Column(Integer, nullable=False)
unit = Column(String(10),nullable=False)
url = Column(String(100),nullable=True)
@app.route('/')
def hello_world():
return 'Hello World!'
# Create the database tables.
db.create_all()
# Create the Flask-Restless API manager.
manager = flask.ext.restless.APIManager(app, flask_sqlalchemy_db=db)
# …
Run Code Online (Sandbox Code Playgroud) 我是python的新手,我刚刚学会了如何使用flask restless和flask sql-alchemy创建一个api.但是我想用随机值为数据库播种.我该如何实现这一目标?请帮忙.这是api代码......
import flask
import flask.ext.sqlalchemy
import flask.ext.restless
import datetime
DATABASE = 'sqlite:///tmp/test.db'
#Create the Flask application and the FLask-SQLALchemy object
app = flask.Flask(__name__)
app.config ['DEBUG'] = True
app.config['SQLALCHEMY_DATABASE_URI'] = DATABASE
db = flask.ext.sqlalchemy.SQLAlchemy(app)
#create Flask-SQLAlchemy models
class TodoItem(db.Model):
id = db.Column(db.Integer, primary_key = True)
todo = db.Column(db.Unicode)
priority = db.Column(db.SmallInteger)
due_date = db.Column(db.Date)
#Create database tables
db.create_all()
#Create Flask restless api manager
manager = flask.ext.restless.APIManager(app, flask_sqlalchemy_db = db)
#Create api end points
manager.create_api(TodoItem, methods = ['GET','POST','DELETE','PUT'], results_per_page = …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Flask-Restless和Ember.js,这并不是那么好.这是GET响应让我沮丧.例如,当我发出GET
请求时/api/people
,例如Ember.js期望:
{
people: [
{ id: 1, name: "Yehuda Katz" }
]
}
Run Code Online (Sandbox Code Playgroud)
但Flask-Restless回应:
{
"total_pages": 1,
"objects": [
{ "id": 1, "name": "Yahuda Katz" }
],
"num_results": 1,
"page": 1
}
Run Code Online (Sandbox Code Playgroud)
如何更改Flask-Restless的响应以符合Ember.js的要求?我有这种感觉它可能在后处理器函数中,但我不知道如何实现它.
我的问题是关于如何使用post添加多个关系数据
我正在使用烧瓶,烧瓶 - SQLAlchemy,烧瓶 - 不安和angularjs,json
我有一些像这样的桌子
class Page(db.Model):
id = db.Column(db.Integer, primary_key=True)
page_name = db.Column(db.String(10))
class Tag(db.Model):
id = db.Column(db.Integer, primary_key=True)
tag_name = db.Column(db.String(10))
class PageTags(db.Model):
page_id = db.Column(db.Integer, db.ForeignKey('page.id'), primary_key=True)
tag_id = db.Column(db.Integer, db.ForeignKey('tag.id'), primary_key=True)
info = db.Column(db.Text)
tag = db.relationship('Tag', backref='tag')
page = db.relationship('Page', backref='pagetags')
Run Code Online (Sandbox Code Playgroud)
我想发布这样的数据
{
"id": 1,
"page_name": "p1",
"pagetags": [
{
"info": "pt1",
"page_id": 1,
"tag_id": 1
},
{
"info": "pt2",
"page_id": 1,
"tag_id": 2
}
]
}
Run Code Online (Sandbox Code Playgroud)
我希望将其添加到数据库中,这将创建三件事:
一页,两页标签.
我可以不安地做这件事吗?怎么办?
提前欣赏它.
我想为异常做一些处理程序.我在python中使用了Flask-restless和SQLAlchemy的组合.
我的问题:
当我向数据库中已存在的对象发送请求到api时,SQLAlchemy显示异常:
IntegrityError: (IntegrityError) column <column_name> is not unique u'INSERT INTO ...
Run Code Online (Sandbox Code Playgroud)
所以我尝试添加属性validation_exceptions
到create_api
方法:
manager.create_api( ... , validation_exceptions=[IntegrityError])
Run Code Online (Sandbox Code Playgroud)
但响应json包含:
{
"validation_errors": "Could not determine specific validation errors"
}
Run Code Online (Sandbox Code Playgroud)
和服务器api显示异常:
Traceback (most recent call last):
File "C:\Python27\lib\site-packages\flask_restless\views.py", line 797, in _extract_error_messages
left, right = str(exception).rsplit(':', 1)
ValueError: need more than 1 value to unpack
Run Code Online (Sandbox Code Playgroud)
Flask-restless中的异常验证不适用于此类异常(IntegrityError)
我该怎么办?是否有可能为异常创建一些处理程序并在json中返回我自己的错误消息?
python validation exception-handling flask-sqlalchemy flask-restless
我正在使用 Flask-Restless 0.17 作为 API。API 有几个小数字段。我可以通过安装 simplejson 成功返回小数,如下所述: https: //stackoverflow.com/a/15224186/1753891。
但是,当我的小数字段为 0 时,该值采用科学记数法,例如0E-8
。我想转而返回0.00000000
。
我正在尝试类似的事情,但无法让它发挥作用。0 仍然以科学记数法返回。
class DecimalJSONEncoder(json.JSONEncoder):
# Try to format the decimal
# EDIT: but am now realizing that this doesn't work
# It was serializing the decimal at all because I had
# simplejson installed.
def default(self, o):
if isinstance(o, decimal.Decimal):
return format(str(o), '.8f')
return super(DecimalJSONEncoder, self).default(o)
def init_app(app):
# .....
# Use the Flask-Restless postprocessor to format.
def postprocesor(result, **kw):
json.dumps(result, cls=DecimalJSONEncoder) …
Run Code Online (Sandbox Code Playgroud) 我正在Flask,Flask-SQLAlchemy和Flask-Restless上构建一个应用程序.我已经使用restless为父子孙子关系生成API*.我孩子的GET会正确地取孙子,但父母的GET不会为每个孩子取孙子.
*事实上,亲子关系是一个多对多但同样的前提.
class Grandchild(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String, nullable=False)
parent = db.relationship('Child', backref='grandchild')
parent_child = db.Table('parent_child',
db.Column('parent_id', db.Integer, db.ForeignKey('parent.id')),
db.Column('child_id', db.Integer, db.ForeignKey('child.id')),
db.Column('number', db.SmallInteger)
)
class Child(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String, nullable=False)
grandchild_id = db.Column(db.Integer, db.ForeignKey('grandchild.id'), nullable=False)
class Parent(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String, nullable=False)
children = db.relationship('Child', secondary=parent_child)
api.create_api(Child, exclude_columns=['grandchild_id'])
api.create_api(Parent)
Run Code Online (Sandbox Code Playgroud)
{
"num_results": 1,
"objects": [
{
"id": 1,
"name": "test"
"grandchild": {
"id": 1,
"name": …
Run Code Online (Sandbox Code Playgroud) flask-restless ×10
python ×8
flask ×6
cors ×1
ember.js ×1
heroku ×1
http-post ×1
javascript ×1
jquery ×1
json ×1
many-to-many ×1
rest ×1
sqlalchemy ×1
validation ×1