我一直在围绕REST进行一些研究.我注意到Amazon S3 API主要使用http标头作为其REST接口.这对我来说是一个惊喜,因为我假设接口主要用于请求参数.
我的问题是:我应该主要使用http标头开发我的REST接口,还是应该使用请求参数?
我有这个型号:
class Movie(models.Model):
# I use taggit for tag management
tags = taggit.managers.TaggableManager()
class Person(models.Model):
# manytomany with a intermediary model
movies = models.ManyToManyField(Movie, through='Activity')
class Activity(models.Model):
movie = models.ForeignKey(Movie)
person = models.ForeignKey(Person)
name = models.CharField(max_length=30, default='actor')
Run Code Online (Sandbox Code Playgroud)
而且我想要匹配一部与另一部演员相同的电影.Not one actor in common, but all the actors in common.
所以我不想要这个:
# actors is a shortcut property
one_actor_in_common = Movie.object.filter(activities__name='actor',
team_members__in=self.movie.actors)
Run Code Online (Sandbox Code Playgroud)
我想要的东西会让"Matrix I"与"Matrix II"相匹配,因为他们分享'Keanu Reeves'和'Laurence Fishburne',但不匹配"Speed"因为他们分享'Keanu Reeves'而不是'Laurence Fishburne'.
我最近在日志中发现了以下错误
Oct 14 10:21:43 squire-labs kernel: [4186256.684193] init: mysql main process (16331) terminated with status 1
Oct 14 10:21:43 squire-labs kernel: [4186256.684215] init: mysql main process ended, respawning
Oct 14 10:21:44 squire-labs kernel: [4186257.394474] type=1400 audit(1381738904.046:23): apparmor="STATUS" operation="profile_replace" name="/usr/sbin/mysqld" pid=28201 comm="apparmor_parser"
Oct 14 10:21:47 squire-labs /etc/mysql/debian-start[28254]: Upgrading MySQL tables if necessary.
Oct 14 10:21:47 squire-labs /etc/mysql/debian-start[28257]: /usr/bin/mysql_upgrade: the '--basedir' option is always ignored
Oct 14 10:21:47 squire-labs /etc/mysql/debian-start[28257]: Looking for 'mysql' as: /usr/bin/mysql
Oct 14 10:21:47 squire-labs /etc/mysql/debian-start[28257]: Looking for …Run Code Online (Sandbox Code Playgroud) 有这个代码:
lista = [3,4,5,2,1,6,8,3]
print lista # [3, 4, 5, 2, 1, 6, 8, 3]
lista.sort(cmp=lambda x,y: cmp(y,x)) # sort descending
print lista # [8, 6, 5, 4, 3, 3, 2, 1] -- it is sorted
lista = [3,4,5,2,1,6,8,3]
print lista # [3, 4, 5, 2, 1, 6, 8, 3]
lista.sort(cmp=lambda x,y: y > x) # sort descending
print lista # [3, 4, 5, 2, 1, 6, 8, 3] -- nothing happens
Run Code Online (Sandbox Code Playgroud)
为什么第二个块中的lambda函数不对数字进行排序?
我正在忙着用烧瓶视图在烧瓶中编写一个RESTful API来驱动API.由于应用程序很大,我将代码模块化为蓝图.我试图捕捉蓝图中的信号时遇到了一些麻烦.我很乐意在我的主__init__.py文件中编写"连接信号"代码,但我想在相关蓝图中编写信号监听器,以免主要create_app方法与蓝图特定代码混乱.
目前我有这个[简化]工作代码:
def create_app(debug=False):
app = Flask(__name__)
...
app.register_blueprint(my_blueprint)
@mysignal.connect_via(app)
def print_howdy(sender, **extra):
print "howdy"
Run Code Online (Sandbox Code Playgroud)
我想将信号连接代码移动到my_blueprint中,但是找不到优雅地做到这一点的方法.我怎样才能做到这一点?
我有一个在nginx / uwsgi上运行的django应用程序。我们最近开始对所有连接使用SSL。自从使用SSL以来,我经常收到以下消息:
HTTPSConnectionPool(host='foobar.com', port=443):
Max retries exceeded with url: /foo/bar
Run Code Online (Sandbox Code Playgroud)
本质上发生的是我让浏览器与Django服务器代码通信,然后使用请求库调用api。它与生成错误的api的连接。另外,我已经将所有请求移到一个会话(即请求会话)中,但这没有帮助。
自从我认为这可能是个问题以来,我就增加了uwsgi侦听器的数量,但是我们的负担并不高。另外,我们在SSL之前从未遇到过此问题。有人对如何解决这个问题有一些建议吗?
编辑
我如何调用API的代码段。我已经(几乎)逐字发布了它。请注意,它不是实际失败的代码,而是在调用时引发异常的请求库self.session.post
def save_answer(self):
logger.info("Saving answer to question")
url = "%s1.0/exam/learneranswer/" % self.api_url
response = {'success': False}
data = {'questionorder': self.request.POST.get('questionorder'),
'paper': self.request.POST.get('paper')}
data['answer'] = ",".join(self.request.POST.getlist('answer'))
r = self.session.post(url, data=simplejson.dumps(data))
if r.status_code == 201:
logger.info("Answer saved successfully")
response['success'] = True
elif r.status_code == 400:
if r.text == "Paper expired":
logger.warning("Timer has expired")
response['message'] = 'Your time has run out'
if r.text == "Question locked":
response['message'] = …Run Code Online (Sandbox Code Playgroud) 我正在构建一个ember应用程序,并且发现我经常需要重新启动brunch watch -s命令,以便更新我的应用程序.虽然早午餐会在每次更改时重新编译,但只有重新启动命令才能完成更改.
难道我做错了什么?有没有解决这个问题的方法?
注意:浏览器缓存已关闭
更新:我想出了如何调试早午餐;)我发现如下:
brunch:common Writing file 'public/javascripts/app.js' +14s
29 May 20:47:46 - info: compiled in 73ms
brunch:watch File 'app/templates/contact.hbs' received event 'change' +3s
brunch:file-list Compiled file 'app/templates/contact.hbs' +3s
brunch:generated-file Joining files 'app/app.js, app/controllers/contact.js, app/initialize.js, app/models/category.js, app/models/marker.js, app/models/stock.js, app/routes/application.js, app/routes/category/index.js, app/routes/contact.js, app/templates/about.hbs, app/templates/application.hbs, app/templates/blog.hbs, app/templates/categories.hbs, app/templates/category.hbs, app/templates/category/index.hbs, app/templates/contact.hbs, app/templates/contactEntry.hbs, app/templates/index.hbs, app/templates/new.hbs, app/templates/specials.hbs, app/views/contact.js, app/views/contactEntry.js' to 'public/javascripts/app.js' +3s
brunch:common Writing file 'public/javascripts/app.js' +3s
29 May 20:47:50 - info: compiled in 73ms
brunch:watch File 'app/templates/contact.hbs' received event …Run Code Online (Sandbox Code Playgroud) 我对德比非常感兴趣,昨晚花了大量阅读文档.我目前的架构思想非常适合构建RESTful API,由相应的富客户端应用程序或任何其他有权访问API的人使用.
Derby让我印象深刻的不仅仅是因为它专注于速度,而是因为它的工作原理非常类似于Web(URL与页面匹配).然而,如今移动应用程序适合产品,如果想要为移动设备和浏览器领域开发,似乎需要API.
我的问题是双重的.
derby可以用来与API接口,实质上是编写API适配器并将其与mongoadapter交换出来.我没有看过适配器,但文档暗示编写适配器并不太难.或者,如果接受标头请求json,则derby会对API调用产生json响应.这样它就可以扮演API的角色,并提供webapp服务.
应该将derby视为一个整体应用程序,而不是用于任何其他应用程序(即移动).即浏览器和移动应用程序之间的共同因素将是数据库,而不是API.不将API作为一个共同因素的缺点是,各个应用程序之间的功能可能不一致(不像功能的数量那么多,但有一个可能是错误的,另一个则不是).
我非常想在我们的下一个项目中使用德比,但是需要一些明确的是它是否是工作的工具.(顺便提一下,该项目将是一个大型的Web应用程序,但需要进行移动集成.拥有API可能也是一个好主意,但我还不确定它的用处)
我正在尝试使用ember app kit和使用ES6的ember数据开始一个新项目.我已经设法使用以下代码创建商店adapter.js
var ApplicationAdapter = DS.FixtureAdapter.extend();
export default ApplicationAdapter;
Run Code Online (Sandbox Code Playgroud)
但是,我无法创建模型并访问它.在models/account.js我有这个
var Account = DS.Model.extend({
name: DS.attr('string')
});
Account.FIXTURES = [
{
'id': 1,
'name': 'Acc 1'
}, {
'id': 2,
'name': 'Acc 2'
}
]
export default Account;
Run Code Online (Sandbox Code Playgroud)
在我的routes/accounts.js我有这个:
var AccountsRoute = Ember.Route.extend({
model: function() {
var store = this.get('store');
return store.find('account');
}
});
export default AccountsRoute;
Run Code Online (Sandbox Code Playgroud)
在这个阶段,我只是想从屏幕上显示的灯具中获取一个帐户列表.路由很好,如果我输入静态数据(如索引路由),那么一切正常.但是,使用上面的代码,我遇到了麻烦
DEPRECATION: Action handlers contained in an `events` object are deprecated in favor of putting …Run Code Online (Sandbox Code Playgroud) 我有一个像这样的适配器:
var Adapter = DS.RESTAdapter.extend({
host: 'http://localhost:4200'
});
if (config.environment === 'production') {
Adapter.reopen({
host: 'http://foo.example.com'
});
}
Run Code Online (Sandbox Code Playgroud)
这已经有一段时间了,但最近出现了问题.我的ember应用程序与许多不同的子域(例如foo.example.com和bar.example.com)接口.我的理解是reopen改变所有实例,这就是我认为发生的事情.当我浏览到'/ bar'时,它在生产中使用正确的适配器,但浏览到'/ foo'仍然使用bar.example.com端点.
我的问题是双重的.首先,我在这里使用正确的方法吗?
其次,我想根据运行时设置更改适配器.我需要解决IE8缺乏CORS支持所以我认为如果我有一个ie8开关,适配器应该打example.com/foo而不是foo.example.com.在我看来,这两个领域在概念上是相关的,但我很高兴出错.
更新
为简化起见,我基本上想找到请求的主机名并将其传递给适配器.例如,如果我浏览到www.example.com我希望适配器从中获取记录www.example.com/foo,或者在浏览时www.example2.com我希望适配器从中获取记录www.example2.com/foo.我希望这是有道理的.这甚至可能吗?
我想实现Fibonacci系列以及缓存已经计算的结果.我不确定这种方法在Rust中是否可行,但它是我提出的最好的方法.这是代码:
use std::collections::HashMap;
pub fn fib_hash(n: u32) -> u64 {
let mut map: HashMap<u32, u64> = HashMap::new();
// This is the engine which recurses saving each value in the map
fn f(map: &HashMap<u32, u64>, n: u32) -> u64 {
let c = match map.get(&n) {
Some(&number) => number,
_ => 0,
};
if c != 0 {
return c;
}
let m = match n {
1 if n < 1 => 0,
1...2 => 1,
_ => f(&map, n …Run Code Online (Sandbox Code Playgroud) ember-data ×2
ember.js ×2
python ×2
brunch ×1
derbyjs ×1
django ×1
flask ×1
http ×1
http-headers ×1
httprequest ×1
java-ee ×1
many-to-many ×1
mutable ×1
mysql ×1
orm ×1
rest ×1
rust ×1
signals ×1
ssl ×1