我有第三方提供的HTML/JS/CSS文件(我无法控制),它作为单页面应用程序与使用Django和django-rest-framework构建的后端进行通信.
我想在Heroku上托管这个,因此这些静态资产由Django提供服务.这些文件包含彼此的相对路径.例如,index.html包含:
<link rel="stylesheet" type="text/css" media="screen" href="styles/css/bootstrap.min.css">
Run Code Online (Sandbox Code Playgroud)
这导致404因为styles/css/bootstrap.min.css没有被django路由.
我知道从我的域根目录提供index.html的唯一方法www.domain.com是使用url配置:
url(r'^$', TemplateView.as_view(template_name='index.html'), name='home'),
Run Code Online (Sandbox Code Playgroud)
...即使它不是真正的模板,它只是简单的HTML.
问题出在这样一个事实,即其他资产中的所有网址都与此相关index.html,当然Django不会那样工作.如果我正在开发这个前端应用程序,我将使用static模板标记和各种方法之一来获取javascript的URL.
如果他们提供这个问题的解决方案,我不介意从Heroku切换到另一个PaaS,但手动编辑所有这些文件听起来不是一个有趣的工作...特别是考虑到我将接收这些文件的更新这一事实往前走.
我认为在常规旧服务器上解决此问题的方法是配置Web服务器以正确解析这些URL,但Heroku上似乎没有该选项.
我正在将 django-storages 用于 Heroku 上托管的项目。我已经配置了 django-storages,现在可以很好地从 S3 提供静态文件。
我想以编程方式获取位于 URL 的图像并将其上传到 S3 并将其与模型相关联。
我知道如何使用 urlib2 或 requests 从 url 下载文件。
我想知道的是如何最好地将该图像放到 S3 上并让我可以将其与我的模型和相关模板一起使用。文件大小不确定,但可能总是小于 10MB。
我的问题归结为:
我有这样的模特:
class TheModel(models.Model):
name = models.CharField(max_length=10)
owner = models.ForeignKey(settings.AUTH_USER_MODEL)
Run Code Online (Sandbox Code Playgroud)
我想创建一个API视图,列出所有等于的TheModel对象.TheModel.ownerrequest.user
我想我可以通过覆盖来做到这一点get_queryset,但似乎我应该使用自定义BasePermission.问题是它看起来不像BasePermission.has_object_permission在列表视图中的每个对象上运行.唯一可以运行的是BasePermission.has_permission.我测试了这个: -
class TheModelViewSet(viewsets.ModelViewSet):
model = TheModel
permission_classes = [IsOwner]
class IsOwner(permissions.BasePermission):
def has_permission(self, request, view):
print("checking has permission for {}".format(request.user))
return True
def has_object_permission(self, request, view, obj):
print("checking permission for {} on {}").format(request.user, obj.user)
return obj.owner == request.user
Run Code Online (Sandbox Code Playgroud)
印刷的唯一东西是来自的东西IsOwner.has_permission.
也许我只是在思考它而我应该只使用自定义查询集而不是使用权限?
我觉得这可能在文档中,但我似乎无法弄清楚。
如果我有一个包含外键的序列化程序,fields当该序列化程序嵌套在相关对象中时,如何排除该 FK?
class EmployerSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Employer
fields = ('name', 'person')
class PersonSerializer(serializers.HyperlinkedModelSerializer):
employers = EmployerSerializer()
class Meta:
model = Person
fields = ('name', 'employers')
depth = 1
Run Code Online (Sandbox Code Playgroud)
当我点击 API 时,http://0.0.0.0:8000/person/1/它会列出如下内容:
{
"name": "Joe Blow",
"employers": {
"name": "Acme Inc."
"person": "http://0.0.0.0:8000/person/1/"
}
}
Run Code Online (Sandbox Code Playgroud)
“employers”的“person”键是自引用且冗余的,但仅当序列化器嵌套在它所引用的对象内时才有效。
当序列化器嵌套时,似乎应该有一个选项来排除它,但我无法弄清楚。
我找到了一个PHP脚本,让我做什么,我问这个太问题.我可以很好地使用它,但出于好奇,我想在Python中重新创建以下代码.
我当然可以使用urllib2来获取页面,但是我对如何处理cookie感到茫然,因为机械化(在Windows上使用Python 2.5和2.6以及在Ubuntu上使用Python 2.5进行测试...所有使用最新的机械化版本)似乎打破页面.我怎么在python中这样做?
require_once "HTTP/Request.php";
$req = &new HTTP_Request('https://steamcommunity.com');
$req->setMethod(HTTP_REQUEST_METHOD_POST);
$req->addPostData("action", "doLogin");
$req->addPostData("goto", "");
$req->addPostData("steamAccountName", ACC_NAME);
$req->addPostData("steamPassword", ACC_PASS);
echo "Login: ";
$res = $req->sendRequest();
if (PEAR::isError($res))
die($res->getMessage());
$cookies = $req->getResponseCookies();
if ( !$cookies )
die("fail\n");
echo "pass\n";
foreach($cookies as $cookie)
$req->addCookie($cookie['name'],$cookie['value']);
Run Code Online (Sandbox Code Playgroud)