Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在django的url中发送参数_Python_Django_Django Models_Django Rest Framework_Django Forms - Fatal编程技术网

Python 在django的url中发送参数

Python 在django的url中发送参数,python,django,django-models,django-rest-framework,django-forms,Python,Django,Django Models,Django Rest Framework,Django Forms,我有两种型号: class Tag(models.Model): id = models.AutoField(primary_key=True) name = models.CharField(max_length=255) def __str__(self): return self.name class Question(models.Model): name = models.CharField(max_length=255)

我有两种型号:

class Tag(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=255)

    def __str__(self):
        return self.name


class Question(models.Model):
     name = models.CharField(max_length=255)
     Tag_name = models.ManyToManyField(Tag)

     def __str__(self):
        return self.name
views.py

class QuestionList(APIView):

def get(self, request, tag_id):

    res = Question.objects.filter(Tag_name=tag_id).prefetch_related('Tag_name').order_by('name')[:10]
    print(res)
    serializer = QuestionSerializers(res, many=True)
    data = {}
    return Response(serializer.data)
    # return Response(data)
url.py

urlpatterns = [
    path('admin/', admin.site.urls),
    path('tag=<int:tag_id>/', views.QuestionList.as_view()) //this needs to be edited
]
因此,我得到了所有带有标记4的问题,并按名称排序?

这不是路径的一部分。这些参数可以在
请求.GET
对象中获得,该对象类似于字典

因此,您的路径应该如下所示:

path('/', views.QuestionListView.as_view()),
问题列表视图中
,您可以过滤这些参数:

class QuestionListView(ListAPIView):
    model = Question
    serializers = QuestionSerializers

    def get_queryset(self, *args, **kwargs):
        queryset = super().get_queryset(*args, **kwargs)
        if 'tag' in self.request.GET:
            queryset = queryset.filter(
                Tag_name=self.request.GET['tag']
            )
        if 'order_by' in self.request.GET:
            queryset = queryset.order_by(self.request.GET['order_by'])
        return queryset

    # …
类问题列表视图(列表视图):
模型=问题
序列化程序=问题序列化程序
def get_queryset(self、*args、**kwargs):
queryset=super()
如果self.request.GET中有“tag”:
queryset=queryset.filter(
Tag_name=self.request.GET['Tag']
)
如果self.request.GET中的“order_by”:
queryset=queryset.order\u by(self.request.GET['order\u by'])
返回查询集
#…
这就是说,上述需要额外的脚手架。在这里,您允许用户通过(…)在
.order\u中“注入”项目。黑客可以利用这一点,例如对相关数据的元素进行排序,从而对某些字段进行二进制搜索

值得一看的是,您可以根据您可以过滤的元素等进行定义。它将进一步封装过滤,从而方便在不同的视图中使用它

注意:通常Django模型中字段的名称是用snake_大小写的,而不是PerlCase,因此它应该是:
tags
而不是
Tag_name
。这是因为
ManyToManyField
指零个、一个或多个标记,而且它指的是标记对象,而不是标记的名称

注意:与其从头开始实现视图,不如看一看 这个 这已经可以实现很多样板代码

该路径不是路径的一部分。这些参数可以在
请求.GET
对象中获得,该对象类似于字典

因此,您的路径应该如下所示:

path('/', views.QuestionListView.as_view()),
问题列表视图中
,您可以过滤这些参数:

class QuestionListView(ListAPIView):
    model = Question
    serializers = QuestionSerializers

    def get_queryset(self, *args, **kwargs):
        queryset = super().get_queryset(*args, **kwargs)
        if 'tag' in self.request.GET:
            queryset = queryset.filter(
                Tag_name=self.request.GET['tag']
            )
        if 'order_by' in self.request.GET:
            queryset = queryset.order_by(self.request.GET['order_by'])
        return queryset

    # …
类问题列表视图(列表视图):
模型=问题
序列化程序=问题序列化程序
def get_queryset(self、*args、**kwargs):
queryset=super()
如果self.request.GET中有“tag”:
queryset=queryset.filter(
Tag_name=self.request.GET['Tag']
)
如果self.request.GET中的“order_by”:
queryset=queryset.order\u by(self.request.GET['order\u by'])
返回查询集
#…
这就是说,上述需要额外的脚手架。在这里,您允许用户通过(…)
.order\u中“注入”项目。黑客可以利用这一点,例如对相关数据的元素进行排序,从而对某些字段进行二进制搜索

值得一看的是,您可以根据您可以过滤的元素等进行定义。它将进一步封装过滤,从而方便在不同的视图中使用它

注意:通常Django模型中字段的名称是用snake_大小写的,而不是PerlCase,因此它应该是:
tags
而不是
Tag_name
。这是因为
ManyToManyField
指零个、一个或多个标记,而且它指的是标记对象,而不是标记的名称

注意:与其从头开始实现视图,不如看一看 这个 这已经可以实现很多样板代码


如果要使用此Url通过Django发送多个Url参数:

http://127.0.0.1:8000?tag=4&order_by=name
使用URL.py中的路径尝试以下操作:

path('tag=<int:tag_id>/order_by=<str:name>', views.QuestionList.as_view()) 
path('tag=/order\u by=',views.QuestionList.as\u view())

您有一个很好的例子,或者在我的博客中找到关于Django的文章。

如果您想使用此Url向Django发送多个Url参数:

http://127.0.0.1:8000?tag=4&order_by=name
使用URL.py中的路径尝试以下操作:

path('tag=<int:tag_id>/order_by=<str:name>', views.QuestionList.as_view()) 
path('tag=/order\u by=',views.QuestionList.as\u view())


你有一个很好的例子,或者在我的博客中找到关于Django的文章。

查询字符串不是路径的一部分。那么我该如何实现这一点呢?有人能给我发送views.py进行查询吗?请显示您的视图。py刚刚添加的views.py文件查询字符串不是路径的一部分。好的,那么我该如何实现?有人能给我发送views.py进行查询吗?请显示给我们your views.py刚刚添加了views.py文件有趣的警告。我希望Django有一个现成的方法来修复这个注入漏洞。它一定很受欢迎task@DeepSpace:问题是您无法解决此问题,因为用户可能希望在
.order\u by('user\u password')
上排序(请注意,这将使用散列,但是,公开密码散列仍然不是一个好主意).“super”对象没有属性“get_queryset”是一个错误getting@code_freak4:在一个简单的
apieview
中,确实没有
get\u queryset
。您是否使用了
ListAPIView
?您的意思是我使用ListAPIView而不是get\u queryset?有趣的警告。我希望Django有一个现成的方法来修复这个注入漏洞。它一定很受欢迎task@DeepSpace:问题是您无法解决此问题,因为用户可能希望在
.order\u by('user\u password')
上排序(请注意,这将使用散列,但是,公开密码散列仍然不是一个好主意).“super”对象没有属性“get_queryset”是一个错误getting@code_freak4:在一个简单的
apieview
中,确实没有
get\u queryset
。您是否使用了
ListAPIView
?您的意思是我使用ListAPIView而不是get\u queryset?