按照以下链接的说明,我成功为我的Django应用程序构建了一个REST API:http://django-rest-framework.org/tutorial/quickstart.
我可以通过在Unix提示符下执行以下操作来测试它:
curl -H 'Accept: application/json; indent=4' -u root:myPassword http://www.myWebsite.com/users/
Run Code Online (Sandbox Code Playgroud)
有用 :)
但是,我想使用Chrome扩展程序Advanced Rest Client来测试相同的功能.我已经安装了扩展程序,但我不知道在哪里/如何放置字段.当我做出受过教育的猜测时(正如您在屏幕截图中看到的那样),它拒绝它说"未提供身份验证凭据"
我应该如何/在何处将参数指定给REST API?
我正在构建一个Django应用程序,它公开了一个REST API,用户可以通过它查询我的应用程序的模型.我按照这里的说明操作.
我的路线在myApp的url.py中看起来像这样:
from rest_framework import routers
router = routers.DefaultRouter() router.register(r'myObjects/(?P<id>\d+)/?$', views.MyObjectsViewSet)
url(r'^api/', include(router.urls)),
Run Code Online (Sandbox Code Playgroud)
我的模型看起来像这样:
class MyObject(models.Model):
name = models.TextField()
Run Code Online (Sandbox Code Playgroud)
我的Serializer看起来像这样:
class MyObjectSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = MyObject
fields = ('id', 'name',)
Run Code Online (Sandbox Code Playgroud)
我的Viewset看起来像这样:
class MyObjectsViewSet(viewsets.ViewSet):
def retrieve(self,request,pk=None):
queryset = MyObjects.objects.get(pk=pk).customMyObjectList()
if not queryset:
return Response(status=status.HTTP_400_BAD_REQUEST)
else:
serializer = MyObjectSerializer(queryset)
return Response(serializer.data,status=status.HTTP_200_OK)
Run Code Online (Sandbox Code Playgroud)
当我点击/ api/myObjects/60 /时出现以下错误:
base_name
参数未指定,并且无法自动确定视图集中的名称,因为它没有.model
或.queryset
属性.
我从这里了解到我的路线上需要一个base_name参数.但是从文档来看,我不清楚base_name参数的值应该是什么.有人可以告诉我base_name的路径应该是什么样的?
我正在使用Django 1.7.1.我的模型看起来像这样:
from datetime import datetime
from django.db import models
class myModel(models.Model):
x = models.CharField(max_length=254,null=True, blank=True,)
Run Code Online (Sandbox Code Playgroud)
一切都很好.
但是,当我将以下属性添加到myModel时,它会中断:
y = models.DateTimeField(default=lambda: datetime.utcnow() + timedelta(days=1), editable=False)
Run Code Online (Sandbox Code Playgroud)
manage.py makemigrations
给我以下错误:
ValueError: Cannot serialize function: lambda
Run Code Online (Sandbox Code Playgroud)
这似乎是一个已知的错误:http://comments.gmane.org/gmane.comp.python.django.scm/125724
那么我该如何解决呢?y
从创建模型的那一刻起,我需要将默认值自动设置为24小时.
我正在尝试从本地计算机设置SSHFS共享到远程计算机,但它无法正常工作.我收到错误OSXFUSE文件系统不可用(见下文).怎么解决这个?
仅供参考,我的本地机器是运行OSX 10.9.3的MacBook Pro笔记本电脑.远程机器实际上是运行CentOS的同一硬件上的VirtualBox.
% brew install sshfs # <---- SSHFS is installed
Warning: sshfs-2.5.0 already installed
% brew install osxfuse # <---- OSX Fuse is installed
Warning: osxfuse-2.6.4 already installed
% ssh remote_user@XXX.XXX.XXX.XXX # <---- See, SSH works!!
Last login: Wed Jun 18 18:36:11 2014 from XXX.XXX.XXX.XXX
[remote_user@XXX.XXX.XXX.XXX ~]% exit
% sudo mkdir /mnt
% sudo mkdir /mnt/Share
% sudo sshfs -o IdentityFile=~/.ssh/id_rsa.pub remote_user@XXX.XXX.XXX.XXX:/ /mnt/Share
the OSXFUSE file system is not available (-1)
the OSXFUSE file system is not …
Run Code Online (Sandbox Code Playgroud) 我想在Django中创建一个多步骤表单,它只在所有步骤结束时提交数据以进行处理.每个步骤都需要能够访问和显示我们在上一步中输入的数据.
有没有办法用Django做到这一点?Django的Form-Wizard无法处理这个基本功能.
我想将BigDecimal对象转换为货币值到两个小数位.我不想要任何四舍五入.我该怎么做?
以下方法均无效:
v = BigDecimal("7.1762")
w = BigDecimal("4.2")
v.to_s('2F') # => "7.17 62"
v.to_s('F') # => "7.1762"
v.to_s('%0.2F') # => "0.71762E1"
v.to_s('%0.2f') # => "0.71762E1"
v.truncate(2).to_s('F') # => "7.17" # This one looks like it worked
w.truncate(2).to_s('F') # => "4.2" # But it doesn't pad with the trailing zero(es)
Run Code Online (Sandbox Code Playgroud) 我的Javascript控制器中有以下语句:
$scope.myList = [0, 1, 0.5, 0.6666666];
Run Code Online (Sandbox Code Playgroud)
我的AngularJS模板包括以下内容:
<div ng-repeat="i in myList">{{i}}</div>
Run Code Online (Sandbox Code Playgroud)
这会产生以下HTML输出:
<div>0</div>
<div>1</div>
<div>0.5</div>
<div>0.6666666</div>
Run Code Online (Sandbox Code Playgroud)
但是,我想将数字四舍五入到小数点后两位.但是,我想在输出中只看到有效数字.我不想看到尾随零.我该怎么做?使用{{i | number:2}}
不会消除尾随零.
我有一个完全在我的MacBook上本地运行的Web应用程序.
Webapp有一个前端(Angular/Javascript)和一个后端(Python/Django),它实现了RESTful API.
我对后端进行了Docker化,以便它在Docker容器中完全自包含并暴露端口8000.我将此端口本地映射到4026.
现在我需要Dockerize前端.但是,如果我在本地主机上运行这两个docker容器,我怎样才能让FE向BE发送HTTP请求?FE容器不会知道它外面存在的任何东西.对?
这就是我运行FE的方式:
$ http-server
Starting up http-server, serving ./
Available on:
http://127.0.0.1:8080
http://192.168.1.16:8080
Hit CTRL-C to stop the server
Run Code Online (Sandbox Code Playgroud)
请提供参考资料,说明如何实现这一目标.
我有一个AngularJS应用程序,我的代码看起来像这样:
myApp = angular.module('myApp',
[
'ui.router',
'ngMaterial',
'ngMessages'
]
);
myApp.constant('CONSTANTS', (function() {
// Define your variable
return {
backend: {
baseURL: 'http://mybackend.com:3026'
}
};
})());
Run Code Online (Sandbox Code Playgroud)
我在端口号8000上使用http-server运行此应用程序,如下所示:
% http-server -p 8000
Run Code Online (Sandbox Code Playgroud)
我想传递一个命令行参数,backend.baseURL
以便它超越代码中指定的值.我该怎么做??
我正在尝试按照本教程使用他们的OAuth 2.0 API对Google进行身份验证.但是,我想直接curl
打电话而不是使用他们的库.
我已获得客户端ID和客户端密钥.现在我正在尝试获取这样的访问令牌:
curl \
--request POST \
--header "Content-Type: application/json" \
--data '{
"client_id":"MY_CLIENT_ID",
"client_secret":"MY_SECRET_KEY",
"redirect_uri": "http://localhost/etc",
"grant_type":"authorization_code"
}' \
"https://accounts.google.com/o/oauth2/token"
Run Code Online (Sandbox Code Playgroud)
但是,它不起作用.它给了我以下错误:
{
"error" : "invalid_request",
"error_description" : "Required parameter is missing: grant_type"
}
Run Code Online (Sandbox Code Playgroud)
有人可以请我提供样本卷曲调用以获取访问令牌(和刷新令牌)吗?