我是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模式中使用此参数?
我在运行节点/快速服务器时遇到问题.服务器运行得很好,但随着时间的推移会占用大量内存.它的内存使用量约为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) 如何从视图中的函数py文件向我的django数据库插入数据?是python manage.py shell唯一的插入方式吗?
有关我正在使用的更多解释:
例如:
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数据库.
我有以下型号:
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.
编辑:
一些额外的信息/要求.
createdDateField.如果可能的结果也应按日期排序我想用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 …
在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
我有三个模型玩家,团队和成员,其中玩家和团队使用成员资格作为中间模型具有多对多关系.
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) 我有2个模型CustomUser和Magazine,它们具有随机/唯一子弹字段。现在,我要创建一个第三模型(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应用程序累积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)
安装包:
该应用程序部署在webfaction(也许这有帮助)
我也看过这个问题,但设置CONN_MAX_AGE: 0并没有帮助.
尝试connection.close()在每个芹菜任务结束时添加,但连接数仍在增加.
尝试connection.close()在芹菜文件的顶部添加,但这也没有帮助.
这是我在芹菜任务中实际使用的代码:
我想对我的序列化程序执行部分更新.问题是我在对象级别进行了一些验证.所以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 ×9
python ×3
postgresql ×2
angularjs ×1
celery ×1
django-i18n ×1
django-orm ×1
django-views ×1
express ×1
foreign-keys ×1
gettext ×1
javascript ×1
memory-leaks ×1
node.js ×1
pagination ×1
pymysql ×1
restangular ×1
webfaction ×1
xgettext ×1