小编ils*_*005的帖子

Django REST框架中不允许405"方法POST"

我是Django REST框架的新手.如果我向'/ api/index /'发出POST请求,有人可以解释为什么我会收到这样的错误

405 Method Not Allowed
{"detail":"Method \"POST\" not allowed."}
Run Code Online (Sandbox Code Playgroud)

我的代码如下:

# views.py
class ApiIndexView(APIView):
    permission_classes = (permissions.AllowAny,)

    def post(self, request, format=None):
        return Response("ok")

# urls.py
urlpatterns = [
    url(r'^api/index/$', views.ApiIndexView.as_view()),
]

# settings.py
REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.DjangoModelPermissions',
    ),
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.SessionAuthentication',
        'rest_framework.authentication.TokenAuthentication',
    )
}
Run Code Online (Sandbox Code Playgroud)

但如果我添加<pk>到我的模式中,一切正常:

# views.py
class ApiIndexView(APIView):
    permission_classes = (permissions.AllowAny,)

    def post(self, request, pk, format=None):
        return Response("ok")

# urls.py
urlpatterns = [
    url(r'^api/index/(?P<pk>\d+)/$', views.ApiIndexView.as_view()),
]
Run Code Online (Sandbox Code Playgroud)

我完全糊涂了.为什么有必要使用<pk>并且有没有办法避免在URL模式中使用此参数?

python django django-rest-framework

13
推荐指数
1
解决办法
1万
查看次数

Node.js服务器没有释放内存

我在运行节点/快速服务器时遇到问题.服务器运行得很好,但随着时间的推移会占用大量内存.它的内存使用量约为70mb.但是每次请求需要大约2mb.很快就达到1.5GB的标记并冻结.它也不会随着时间的推移释放任何内存.我的server.js中是否有任何常规错误:

import 'babel/polyfill';
import _ from 'lodash';
import fs from 'fs';
import path from 'path';
import express from 'express';
import ReactDOM from 'react-dom/server';
import router from './router';
import Translator from './core/Translator.js';
import cookieParser from 'cookie-parser';
import StoreContainer from './utils/redux.js';
import { combineReducers } from 'redux';
import reducers from './reducers';
import {setAuthToken, removeAuthToken} from './utils/api';
import i18nLocation from './utils/i18nLocation.js';
import {api, setLangHeader, setProtocol} from './utils/api';
import {clearActiveApartment} from './actions/activeApartment.js';
import {clearCityInfo} from './actions/city.js';
import {setDevice} from './actions/appData.js';
import MobileDetect from 'mobile-detect'; …
Run Code Online (Sandbox Code Playgroud)

memory-leaks node.js express

11
推荐指数
1
解决办法
826
查看次数

如何从views.py文件向django数据库插入数据?

如何从视图中的函数py文件向我的django数据库插入数据?是python manage.py shell唯一的插入方式吗?

有关我正在使用的更多解释:

  • python 3.4
  • django 1.8.2
  • PyMySQL

例如:

models.py:

from django.db import models

class Publisher(models.Model):
    name = models.CharField(max_length=30)
    city = models.CharField(max_length=60)
Run Code Online (Sandbox Code Playgroud)

views.py:

from django.http import HttpResponse
import pymysql
from books.models import Publisher

def send(request):
    p = Publisher(name='Apress', city='Berkeley')
    p.save()
Run Code Online (Sandbox Code Playgroud)

urls.py

来自niloofar.views import send

url(r'^ index /',发送),

我想在加载页面索引时,send函数工作并将数据插入数据库.

这是行不通的.它没有给出任何错误,当我刷新索引页面时没有任何反应,没有任何内容被发送到数据库.我认为在我尝试插入数据的方式上存在语法错误.

让我注意到即使我跑的python manage.py shell话:

来自books.models import Publisher

p =出版商(name ='Apress',city ='Berkeley')

p.save()

什么都不会插入django数据库.

python django django-models django-views pymysql

10
推荐指数
4
解决办法
5万
查看次数

通过交替值来订购查询集

我有以下型号:

class Entry(models.Model):
    name = models.Charfield(max_length=255)
    client = models.Charfield(max_length=255)
Run Code Online (Sandbox Code Playgroud)

client是客户端的名称,可能有像facebook,google等等的值.

是否可以对查询集进行排序,以便结果交替出现client?的值?我的期望是这样的:

Entry.objects.order_by('alternate client') --> 

| client   | name   |
| google   | robert |
| facebook | linda  |
| google   | kate   | 
| facebook | jack   |
| google   | nina   |
| facebook | pierre |    
Run Code Online (Sandbox Code Playgroud)

如果有帮助,我正在使用django2.x和postgres.

编辑:

一些额外的信息/要求.

  • 我有大约10到20个不同的客户
  • Entry还有一个createdDateField.如果可能的结果也应按日期排序
  • 我想对Entry使用分页,所以解决方案应该是使用django的ORM

django postgresql django-models django-queryset

10
推荐指数
1
解决办法
1425
查看次数

Django makemessages javascript(xgettext)

我想用django i18n支持翻译我的javascript文件.我有以下javascript文件:

var test_text = gettext('example');

@withStyles(styles)
export default class HomePage {
  static contextTypes = {
    i18n: PropTypes.object
  }

  constructor() {
    this.componentDidMount.bind(this);
    this.handleCitySearch.bind(this);
  }

  render() {
    return (
      <Grid className="HomePage">
        <Row className="HomePage-hero">
          <Col md={8} style={{ textAlign: 'center' }}>
            <Input ref="city" bsSize="large" type="text" />
            <Button bsSize="large" bsStyle="default" onClick={this.handleCitySearch}>{gettext('button text')}</Button>
          </Col>
          <Col md={4}>
            <ul>
              <li>{gettext('SOME TEXT')}</li>
              <li>{gettext('MORE TEXT')}</li>
            </ul>
          </Col>
        </Row>
      </Grid>
      );
  }
}
Run Code Online (Sandbox Code Playgroud)

现在我运行djangos makemessages命令:

python manage.py makemessages -l de -d djangojs -v 3 -s
Run Code Online (Sandbox Code Playgroud)

我希望创建的翻译文件有四个条目('example','button text','SOME TEXT'和'MORE TEXT'),因为gettext …

javascript django gettext xgettext django-i18n

8
推荐指数
1
解决办法
1051
查看次数

如何在Restangular和Django Rest Framework中添加分页?

在DRF中我已经将分页限制添加到100,'PAGINATE_BY': 100, 因为Restangular期望数组形式的结果,我必须在我的角度应用程序模块中使用以下元提取器函数

var app = angular.module("myapp", ["restangular"].config(function(
            RestangularProvider){

  RestangularProvider.setResponseExtractor(function(response, operation, what, url) {
    if (operation === "getList") {
        var newResponse = response.results;
        newResponse._resultmeta = {
            "count": response.count,
            "next": response.next,
            "previous": response.previous
        };
        return newResponse;
    }

    return response;
    });
});
Run Code Online (Sandbox Code Playgroud)

我的控制器看起来像

app.controller('DataCtrl',function($scope, Restangular){

    var resource = Restangular.all('myapp/api/dataendpoint/');
        resource.getList().then(function(data){
        $scope.records = data;
    });    
}
Run Code Online (Sandbox Code Playgroud)

控制器中没有元信息,如果有超过100条记录,我该如何分页?

django pagination angularjs django-rest-framework restangular

8
推荐指数
1
解决办法
813
查看次数

如何在具有自定义.update()的情况下更新实例中的值以更新DRF可写嵌套序列化程序中的多对多关系

我有三个模型玩家,团队和成员,其中玩家和团队使用成员资格作为中间模型具有多对多关系.

class Player(models.Model):
    name = models.CharField(max_length=254)
    rating = models.FloatField(null=True)
    install_ts = models.DateTimeField(auto_now_add=True, blank=True)
    update_ts = models.DateTimeField(auto_now_add=True, blank=True)


class Team(models.Model):
    name = models.CharField(max_length=254)
    rating = models.FloatField(null=True)
    players = models.ManyToManyField(
            Player,
            through='Membership',
            through_fields=('team', 'player'))
    is_active = models.BooleanField(default=True)
    install_ts = models.DateTimeField(auto_now_add=True, blank=True)
    update_ts = models.DateTimeField(auto_now_add=True, blank=True)


class Membership(models.Model):
    team = models.ForeignKey('Team')
    player = models.ForeignKey('Player')
    #date_of_joining = models.DateTimeField()
    install_ts = models.DateTimeField(auto_now_add=True, blank=True)
    update_ts = models.DateTimeField(auto_now_add=True, blank=True)
Run Code Online (Sandbox Code Playgroud)

现在我被要求使用django rest框架更新此成员资格.我尝试通过编写团队序列化程序的自定义来更新使用Writable嵌套序列化程序的那些.update().

@transaction.atomic
def update(self, instance, validated_data):
    '''
    Cutomize the update function for the …
Run Code Online (Sandbox Code Playgroud)

django django-orm django-rest-framework

8
推荐指数
1
解决办法
2775
查看次数

Django外键to_field

我有2个模型CustomUserMagazine,它们具有随机/唯一子弹字段。现在,我要创建一个第三模型(Article),该模型具有到slug字段的外键:

class CustomUser(AbstractBaseUser):
    slug = RandomSlugField(length=6, unique=True)
    ...

class Magazine(models.Model):
    slug = RandomSlugField(length=6, unique=True)
    name = models.CharField()

class Article(models.Model):
    magazine = models.ForeignKey(Magazine, to_field='slug')
    author = models.ForeignKey(settings.AUTH_USER_MODEL, to_field='slug')
Run Code Online (Sandbox Code Playgroud)

但是,当我迁移数据库以创建Article模型时,出现以下错误:

django.core.exceptions.FieldDoesNotExist: CustomUser has no field named 'slug'
Run Code Online (Sandbox Code Playgroud)

但是CustomUser显然有一个名为“ slug”的字段。

对于Magazine模型,我不会收到此错误。有谁知道出什么问题了吗?

我将此包用于slug字段:https : //github.com/mkrjhnsn/django-randomslugfield

编辑:这是完整的CustomUser模型:

class CustomUser(AbstractBaseUser, PermissionsMixin):
    slug = RandomSlugField(length=6, exclude_upper=True)
    username = models.CharField(
        _('username'), max_length=30,
        help_text=_('Required. 30 characters or fewer.'
                'Letters, digits and '
                '@/./+/-/_ only.'),
        validators=[
            validators.RegexValidator(r'^[\w.@+-]+$',
                                  _('Enter a valid username.'), 'invalid')
        ]) …
Run Code Online (Sandbox Code Playgroud)

django foreign-keys django-models

7
推荐指数
1
解决办法
6960
查看次数

Django:Postgres连接没有关闭

我有一个问题,我的django应用程序累积postgres连接随着时间的推移.似乎大约每30分钟建立一个新连接并且旧连接不会关闭(参见屏幕).一段时间后,所有连接都被阻止,最大连接数设置为100.

有谁知道导致这个问题的原因是什么?

在此输入图像描述

我整合了一些之后发现了这个celery tasks.所以我很确定它与芹菜有关.

所以我尝试在每个Task使用after_return方法后手动关闭连接:

from django.db import connection

class DBTask(Task):
    abstract = True

    def after_return(self, *args, **kwargs):
        connection.close()

@task(name='example', base=DBTask)
def example_task(value):
    # do some stuff
Run Code Online (Sandbox Code Playgroud)

但这也无济于事.也许我完全错了,根本就没有关系celery.

我的数据库配置:

DATABASES = {
    'default': {
        'ENGINE': 'django.contrib.gis.db.backends.postgis',
        'NAME': 'production', 
        'USER': 'production', 
        'HOST': 'some.host', 
        'CONN_MAX_AGE': 0,
    },
}
Run Code Online (Sandbox Code Playgroud)

安装包:

  • django 1.8.9
  • pyscopg2 2.6.1
  • 芹菜3.1.20
  • django-celery 3.1.17

该应用程序部署在webfaction(也许这有帮助)

我也看过这个问题,但设置CONN_MAX_AGE: 0并没有帮助.

更新:

尝试connection.close()在每个芹菜任务结束时添加,但连接数仍在增加.

更新2:

尝试connection.close()在芹菜文件的顶部添加,但这也没有帮助.

更新3:

这是我在芹菜任务中实际使用的代码:

celery_tasks.py …

python django postgresql webfaction celery

7
推荐指数
1
解决办法
2610
查看次数

Django REST Framework部分更新和验证

我想对我的序列化程序执行部分更新.问题是我在对象级别进行了一些验证.所以is_valid()调用总是失败,我无法保存更新的序列化程序.我可以以某种方式阻止对部分更新的对象级别验证吗?这里有一个代码示例:

class ModelSerializer(serializers.ModelSerializer)
    class Meta:
        model = A
        fields = ('field_b','field_b')

    def validate(self,attrs):
         if attrs.get('field_a') <= attrs.get('field_b'):
             raise serializers.ValidationError('Error')
Run Code Online (Sandbox Code Playgroud)

在我的视图中部分更新方法:

class ModelViewSet(viewsets.ModelViewSet):
    def partial_update(self, request, *args, **kwargs):
        instance = self.get_object()
        serializer = self.serialize(instance, data=request.data, partial=True)
    serializer.is_valid(raise_exception=True)
    new_instance = serializer.save()
    return Response(serializer.data)
Run Code Online (Sandbox Code Playgroud)

问题是我不能在没有'field_b'的情况下更新'field_a'.谢谢你的帮助!

django django-rest-framework

6
推荐指数
1
解决办法
1万
查看次数