【问题标题】:How can I test get request with curl on django?如何在 django 上使用 curl 测试获取请求?
【发布时间】:2019-05-07 13:17:08
【问题描述】:

我正在尝试测试 get 请求是否有效,但我不确定如何在 django 中执行此操作。我已将 postgre 数据库连接到 django 服务器,我正在尝试测试是否可以让 GET 请求正常工作,但我在互联网上找不到任何具体内容。

我有一些使用 Flask 测试 API 的经验,但没有使用 Django。

views.py

from django.contrib.auth.views import login_required
from django.shortcuts import render
from django.http import HttpResponse
#from cameras.models import CameraQuerySet, Camera, CameraAuthenticationToken, CameraGroupQuerySet, CameraGroup, CameraStatusUpdate, CameraGroupLog
from . import models #if not up


@login_required
def camera_lookup(request):
    serial_number = request.GET.get('serial_number')
    found = 0
    if serial_number != None:
        serial_number = serial_number.lower()
        found = Camera.objects.filter(serial_number=serial_number).count()
    return HttpResponse(str(found), content_type="text/html", status=200)

urls.py

from . import views
from django.urls import path

app_name = 'cameras'

urlpatterns = [
    path('add/', views.add, name='add'),
    path(r'api/1.0/camera/', views.camera_lookup, name='camera_lookup'),

models.py

class Camera(TimeStampedModel):
    public_identifier = models.UUIDField(unique=True,
                                         default=uuid.uuid4,
                                         editable=False)

    serial_number = models.CharField(max_length=100,
                                     unique=True,
                                     null=True)

    name = models.CharField(max_length=50, blank=True, null=True)

    group = models.ForeignKey('CameraGroup',
                              on_delete=models.SET_NULL,
                              null=True,
                              related_name='cameras',
                              related_query_name='cameras')

    group_tracker = FieldTracker(fields=('group',))

    objects = CameraQuerySet.as_manager()

    #identifier from assembly (what parts does the camera consist of)
    bom                = models.CharField(max_length=50, blank=True, null=True)

    #what firmware is the camera on (mender artifact name)
    firmware           = models.CharField(max_length=50, blank=True, null=True)

    #last seen at ip
    last_sighting_ip   = models.CharField(max_length=50, blank=True, null=True)
    last_sighting_time = models.DateTimeField(null=True, blank=True)

    #json blob that the camera can send home w. health status
    health = models.TextField(blank=True)

【问题讨论】:

  • 你的问题不清楚。为什么要使用 curl 而不是在浏览器中进行测试?如果后端是 Django 而不是任何其他框架,是什么让您认为发出请求有什么不同?
  • 任何可以通过 HTTP 与您的服务器通信的工具(浏览器、curl、邮递员等)都可以用来提交请求,并且应该从您的服务器接收响应。这只是 HTTP。与任何其他 Web 框架没有什么不同。
  • 对不起,我在表达我的意思方面做得很糟糕。我正在尝试测试 camera_lookup 请求,但我不确定我是否一开始就写对了。我试过 curl 127.0.0.1:8000/cameras/api/1.0/camera/?serial_number=1234 。但我给了 302 代码
  • 302 是重定向。查看 Location 标头以找出它被重定向到的位置。见here
  • 我发现了问题。我正在导入这样的模型“from .import models”,我不得不将其更改为“from camera.models import CameraQuerySet, Camera”

标签: python django curl get


【解决方案1】:

我使用 Postman(它最初是一个堆栈溢出帖子,所以我毫无疑虑地推荐)。其他工具可用。

优点:

  1. 您可以进行 GET、POST、PUT 等操作
  2. 设置标头、授权令牌
  3. 使用控制台查看请求和响应标头
  4. 只是使用它帮助我理解了 api 调用

缺点

  1. 不是浏览器,它不会提醒您 CORS 错误
  2. 请求和响应标头与浏览器发出的请求不同

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-02
    • 2016-09-23
    • 2012-05-03
    • 1970-01-01
    • 1970-01-01
    • 2021-05-05
    • 2021-03-17
    • 1970-01-01
    相关资源
    最近更新 更多