我将创建一个必须是远程用户的 Django REST 项目:外部服务器公开身份验证 api 并使用JWT。它也向我公开了一个不记名令牌以允许我使用 api。我的 Django 将不得不公开 api 以供客户端(移动应用程序)进行身份验证。我不太清楚如何处理身份验证流量:我是否必须构建自定义身份验证?
我正在尝试创建一个自定义API(不使用模型),但是它没有在架构中显示请求定义(因此,没有大张旗鼓地显示它)。我当前的代码是:
views.py
class InfoViewSet(viewsets.ViewSet):
@list_route(methods=['POST'])
def some_method(self, request):
data = JSONParser().parse(request)
serializer = GetInfoSerializer(data=data)
serializer.is_valid(raise_exception=True)
info = get_data_from_elsewhere(serializer.data)
return Response(info)
Run Code Online (Sandbox Code Playgroud)
urls.py
router.register(r'^info', InfoViewSet, base_name='info')
Run Code Online (Sandbox Code Playgroud)
serializers.py
class InfoSomeMethodSerializer(serializers.Serializer):
list_id = serializers.ListField(child=serializers.IntegerField())
password = serializers.CharField()
Run Code Online (Sandbox Code Playgroud)
它显得有些招摇,但只是响应部分。如何注册发布参数?我也不确定我是否正确使用了DRF(我是新手),所以任何纠正都将不胜感激。
-
编辑:我尝试了Linovia建议的serializer_class参数,但是没有用,我得到了:
TypeError:InfoViewSet()收到无效的关键字“ serializer_class”
我尝试了覆盖get_serializer_class方法,但也没有用:
def get_serializer_class(self):
if self.action == 'some_method':
return InfoSomeMethodSerializer
Run Code Online (Sandbox Code Playgroud) 我正在为我的 API 端点使用 Django REST 通用视图。我的序列化程序中的字段之一具有 ManyToMany 关系。我想将该字段显示到我的 API 端点中,但收到此错误
HTML 输入中当前不支持列表。
我的看法是这样的:
class AlertCreateView(ListCreateAPIView):
permission_classes = (IsAuthenticated,)
pagination_class = None
serializer_class = AlertSerializer
def get_queryset(self):
queues = Queue.objects.all()
for queue in queues:
queryset = Alert.objects.filter(
queue=queue
)
return queryset
Run Code Online (Sandbox Code Playgroud)
我的序列化器是这样的:
class AlertSerializer(serializers.ModelSerializer):
queue = QueueSerializer(many=True)
class Meta:
model = Alert
fields = (
'id', 'name', 'queue','email', 'expected_qos'
)
Run Code Online (Sandbox Code Playgroud) http://127.0.0.1:8000/app_restFramework/users/,返回文字
/ app_restFramework/users /'User'对象的AttributeError没有属性'books'
models.py
class User(models.Model):
username = models.CharField(max_length=100)
class Book(models.Model):
name = models.CharField(max_length=100)
author = models.CharField(max_length=100)
publisher = models.CharField(max_length=100)
time = models.CharField(max_length=100)
owner = models.ManyToManyField(User)
Run Code Online (Sandbox Code Playgroud)
serializers.py
from app_restFramework.models import Book,User
class UserSerializer(serializers.ModelSerializer):
books = serializers.PrimaryKeyRelatedField(many = True, read_only = True)
class Meta:
model = User
fields = ('id', 'username', 'books')
Run Code Online (Sandbox Code Playgroud)
views.py
class UserList(generics.ListCreateAPIView):
queryset = User.objects.all()
serializer_class = UserSerializer
Run Code Online (Sandbox Code Playgroud)
urls.py
url(r'^app_restFramework/users/$', app_restFramework.views.UserList.as_view() ),
Run Code Online (Sandbox Code Playgroud) 这是我的模型
class modelTest(models.Model):
created_at = models.DateTimeField(auto_now_add=True,blank=True,null=True)
updated_at = models.DateTimeField(auto_now=True,blank=True,null=True)
imageA = models.ImageField(upload_to='images/', default='',null=True)
Run Code Online (Sandbox Code Playgroud)
这是相关的序列化器
class Serializer_Job_TX(serializers.ModelSerializer):
class Meta:
model = modelTest
fields = [
'created_at',
'updated_at',
'imageA',
]
Run Code Online (Sandbox Code Playgroud)
我如何确保当日期时间字段发生序列化时,它只输出日期而不输出时间?有什么建议
如何使用自定义保存/恢复逻辑创建 Django Rest 框架读写字段?我正在使用 DRF 3.5.4 和 Django 1.8。
像这样的东西:
class UserSerializer(serializer.Serializer):
# username is a field in the backing model, no problemo
username = serializers.CharField()
# type is not an actual model field, but reflects whether the user has
# Django permission "foo" set. I.e. "normal" = no permission, "silly" =
# permission is set.
type = serializers.ChoiceField(["normal", "silly"])
Run Code Online (Sandbox Code Playgroud)
换句话说:创建用户时,如果type == "silly",则为他设置权限“foo”,如果类型为“正常”则不设置。并且在检索用户时,type == "silly"如果用户设置了权限“foo”,如果没有则设置“正常”。
不允许/不需要用户更新,但我也有兴趣知道如何将其应用于更新。
有没有办法发送验证邮件.当用户通过drf(Django Rest框架)注册时.我在我的User模型中有这个代码:
from django.core.mail import send_mail
from config import settings
def email_user(self, subject, message, from_email=settings.DEFAULT_FROM_EMAIL, **kwargs):
send_mail(subject, message, from_email, [self.email], fail_silently=False, **kwargs)
Run Code Online (Sandbox Code Playgroud)
在我的settings.py:
EMAIL_USE_TLS = True
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_PASSWORD = '`132312123'
EMAIL_HOST_USER = 'mimic@gmail.com'
EMAIL_PORT = 587
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER
Run Code Online (Sandbox Code Playgroud)
但是电子邮件没有发送,我也想验证电子邮件服务,因此用户点击链接时会被激活.如何完成这些?
我已经阅读了一些关于序列化字典的答案和帖子。但我仍然无法让它工作。这是问题所在。我在 django app 中做了一些数据处理,它返回这个字典(它有关于测验的信息):
{101: {'subject': 'General-Intelligence', 'topics': ['Coding Decoding', 'Dice & Boxes', 'Statement & Conclusion', 'Venn Diagram', 'Mirror and Water Image', 'Paper Cutting and Folding', 'Clock/Time', 'Matrix', 'Direction', 'Blood Relation', 'Series Test', 'Ranking', 'Mathematical Operations', 'Alphabet Test', 'Odd one out', 'Analogy'], 'num_questions': 25, 'creator': 'Rajesh K Swami'}}
Run Code Online (Sandbox Code Playgroud)
我想序列化这本字典。所以我所做的就是为这本词典创建了一个类。IE。
class PsudoTests:
def __init__(self,body):
self.body = body
Run Code Online (Sandbox Code Playgroud)
也是一个序列化器:
class PsudoTestSerializer(serializers.Serializer):
body = serializers.DictField()
Run Code Online (Sandbox Code Playgroud)
现在在 api 视图中:
class TestListView(generics.ListAPIView):
def get_serializer_class(self):
serializer = PsudoTestSerializer
def get_queryset(self):
me = Studs(self.request.user)
tests = me.toTake_Tests(1) …Run Code Online (Sandbox Code Playgroud) 我假设标题中有错误,为清楚起见,这里再次
'CityListViewSet' should either include a `serializer_class` attribute,
or override the `get_serializer_class()` method.
Run Code Online (Sandbox Code Playgroud)
我的序列化程序未连接到我的视图,在我的代码中应该如此。我不太确定这个错误在哪里。我想知道你们是否看到过类似的东西?
这是代码。
路由器:
router.register(r'city-list', CityListViewSet, base_name='city-list')
Run Code Online (Sandbox Code Playgroud)
视图:
class CityListViewSet(viewsets.ReadOnlyModelViewSet):
queryset = Venue.objects.values('city').distinct()
serializer = CitySerializer(queryset, many=True)
ordering_fields = ('city',)
ordering = ('city',)
Run Code Online (Sandbox Code Playgroud)
序列化器:
class CitySerializer(serializers.ModelSerializer):
class Meta:
model = City
fields =('city',)
Run Code Online (Sandbox Code Playgroud)
用似乎正确连接的代码会导致这种断言错误的原因是什么?
Rest Framework Django - 禁用字段接受空值
如何配置序列化模型以接受空白字段?
警告
{"Operacao": ["This field can not be blank."]}
Run Code Online (Sandbox Code Playgroud)
模型
class SEF(models.Model):
operacao = models.CharField(max_length=10, null=True)
documento = models.CharField(max_length=50, null=True)
user = models.ForeignKey(User)
Run Code Online (Sandbox Code Playgroud)
序列化器
class SEFCreateSerializer(serializers.ModelSerializer):
class Meta:
model = SEF
fields = ('operacao', 'documento', 'user')
Run Code Online (Sandbox Code Playgroud)
看法
sef_create = SEFCreateSerializer(data=data, many=True)
if sef_create.is_valid():
sef_create.save()
salvo = HTTP_200_OK
else:
salvo = sef_create.errors
Run Code Online (Sandbox Code Playgroud) serializers.py
from django.contrib.auth.models import User
from engine.models import Game
from rest_framework import serializers
class GameSerializer(serializers.ModelSerializer):
class Meta:
model = Game
fields = (
'game_name',
'level',
'game_type',
'creator',
'id',
)
Run Code Online (Sandbox Code Playgroud)
我想creator.username为creator刚刚返回用户对象,它是创作者的ID的整数。如何获取creator.username而不是creator?
我已经使用 pip 安装了 DjangoRest 框架和 Mongo 引擎,包含rest_framework_mongoengine在INSTALLED_APPS列表中。当我运行服务器时仍然抛出异常。
文件“/Users/anum/Desktop/Python/ConnectBox/env/lib/python2.7/site-packages/django/utils/autoreload.py”,第 227 行,包装器 fn(*args, **kwargs)
文件“/Users/anum/Desktop/Python/ConnectBox/env/lib/python2.7/site-packages/django/core/management/commands/runserver.py”,第 117 行,inner_run autoreload.raise_last_exception()
文件“/Users/anum/Desktop/Python/ConnectBox/env/lib/python2.7/site-packages/django/utils/autoreload.py”,第 250 行,在 raise_last_exception Six.reraise(*_exception) 中
文件“/Users/anum/Desktop/Python/ConnectBox/env/lib/python2.7/site-packages/django/utils/autoreload.py”,第 227 行,包装器 fn(*args, **kwargs)
文件“/Users/anum/Desktop/Python/ConnectBox/env/lib/python2.7/site-packages/django/ init .py”,第 27 行,在 setup apps.populate(settings.INSTALLED_APPS) 中
文件“/Users/anum/Desktop/Python/ConnectBox/env/lib/python2.7/site-packages/django/apps/registry.py”,第 85 行,填充 app_config = AppConfig.create(entry)
文件“/Users/anum/Desktop/Python/ConnectBox/env/lib/python2.7/site-packages/django/apps/config.py”,第 94 行,在 create module = import_module(entry) 中
文件“/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/importlib/ init .py”,第 37 行,在 import_module import (name)中
导入错误:没有名为rest_framework_mongoengine的模块
这是我的Settings.py。
使用pip list命令,列出了以下软件包:
Django (1.11.2)
djangorestframework (3.6.3)
mongoadmin (0.2)
mongodbforms (0.3)
mongoengine (0.13.0)
pip …Run Code Online (Sandbox Code Playgroud) django ×9
python ×4
api ×1
assertion ×1
email ×1
html-parsing ×1
jwt ×1
mongoengine ×1
rest ×1