【问题标题】:Post query to API in Django REST在 Django REST 中向 API 发布查询
【发布时间】:2017-12-31 21:43:33
【问题描述】:

我在 Angular 2 中有代码:

sendPost(){
    let headers = new Headers();
      headers.append('Content-Type', 'application/json');

    let requestOptions = new RequestOptions({headers: headers});
    requestOptions.headers = headers;

      let data = {
                  "name": "XX", 
                  "email": "xxx@op.com", 
                  "phone_number": "+99999995555", 
                  "address": "YYY", 
                  "code": "80-885", 
                  "city": "YHYY", 
                  "voivodeship": "ZZZZ", 
                  "description": "VVVVV"
                  };

        this.http.post(`http://127.0.0.1:8000/companies/create`, data, requestOptions).subscribe(res => {
            console.log(res.json());
          }, (err) => {
            console.log(err);
          });
  }

错误 API:

<WSGIRequest: OPTIONS '/companies/create'>
Internal Server Error: /companies/create
Traceback (most recent call last):
  File "C:XX\CRM\env\lib\site-packages\django\core\handlers\exception.py", line 41, in inner
    response = get_response(request)
  File "C:XX\CRM\env\lib\site-packages\django\core\handlers\base.py", line 198, in _get_response
    "returned None instead." % (callback.__module__, view_name)
ValueError: The view my_crm.views.companies_create didn't return an HttpResponse object. It returned None instead.
[25/Jul/2017 21:32:35] "OPTIONS /companies/create HTTP/1.1" 500 59515

API 显示函数中的某处存在错误,但是当我使用 POSTMAN 时,这是相同的 JSON 没有问题。错误可能在哪里? 我认为使用 POSTMAN 进行测试时 API 处理得很好。

编辑: API函数:

@csrf_exempt
def companies_create(request):
    """
    Create a new company.
    """
    if request.method == 'POST':
        data = JSONParser().parse(request)
        serializer = CompanySerializer(data=data)
        if serializer.is_valid():
            serializer.save()
            return JsonResponse(serializer.data, status=201)
        return JsonResponse(serializer.errors, status=400)

【问题讨论】:

  • 请发一个api查看功能
  • @Aniket 我添加了
  • 您的 http 方法是 OPTION WSGIRequest: OPTIONS,但只有当方法 POST 时您才会响应

标签: django angular rest django-rest-framework


【解决方案1】:

解决办法是替换:

headers.append('Content-Type', 'application/json');

到:

headers.append('Content-Type', 'application/x-www-form-urlencoded');

我无法解释这一点,因为我正在发送 JSON 文件。也许有人会解释这是什么意思?

【讨论】:

    猜你喜欢
    • 2022-11-13
    • 2015-04-17
    • 1970-01-01
    • 2019-09-10
    • 1970-01-01
    • 1970-01-01
    • 2020-02-20
    • 1970-01-01
    • 2021-05-03
    相关资源
    最近更新 更多