如何注释 Django 视图的方法?
How to annotate Django view's methods?
我想在 Django 中使用 Python type hints in my Django project. What's the proper way to annotate get
/post
methods of a simple class-based view?
我搜索了 Django 代码本身,但它似乎不包含任何类型提示。
存在您可能感兴趣的存储库:https://github.com/machinalis/mypy-django
这将允许您像这样使用注释:
def get(self, request: HttpRequest, question_id: str) -> HttpResponse:
如果使用基于函数的视图,并且如果你不想或不需要 mypy-django,你可以这样做:
from django.http import HttpRequest, HttpResponse, JsonResponse
def some_fbv(request: HttpRequest) -> HttpResponse:
....
return foo
def some_json_producing_fbv(request: HttpRequest) -> JsonResponse:
...
return foo
Django 存根是维护良好的包,https://github.com/typeddjango/django-stubs。
import typing as t
from django.http import HttpResponseRedirect
from django.shortcuts import render
from django.views import View
from django.http import HttpRequest, HttpResponse, JsonResponse,
HttpResponseRedirect
from .forms import MyForm
# type alias when response is one of these types
RedirectOrResponse = t.Union[HttpResponseRedirect, HttpResponse]
class MyFormView(View):
form_class = MyForm
initial = {'key': 'value'}
template_name = 'form_template.html'
def get(self, request: HttpRequest, *args: Any, **kwargs: Any) -> HttpResponse:
form = self.form_class(initial=self.initial)
return render(request, self.template_name, {'form': form})
def post(self, request: HttpRequest, *args: tuple[Any],
**kwargs: dict[str, t.Union[int, str]]) -> RedirectOrResponse:
form: MyForm = self.form_class(request.POST)
if form.is_valid():
# <process form cleaned data>
return HttpResponseRedirect('/success/')
return render(request, self.template_name, {'form': form})
HttpRequest
映射到函数或方法中的请求变量。
HttpResponse, JsonResponse, StreamingResponse, Redirect
将是视图返回的值 function/method。
*args, **kwargs
既简单又棘手,因为它可以是 any 值元组或值字典。 *args: Any
或 *args: tuple[Any]
(如果您知道,也可以使用特定类型)。同样适用于 **kwargs
.
- 每当传递或返回 class 时,使用
type[cls]
。
更多示例:https://github.com/typeddjango/django-stubs/tree/master/tests
我想在 Django 中使用 Python type hints in my Django project. What's the proper way to annotate get
/post
methods of a simple class-based view?
我搜索了 Django 代码本身,但它似乎不包含任何类型提示。
存在您可能感兴趣的存储库:https://github.com/machinalis/mypy-django
这将允许您像这样使用注释:
def get(self, request: HttpRequest, question_id: str) -> HttpResponse:
如果使用基于函数的视图,并且如果你不想或不需要 mypy-django,你可以这样做:
from django.http import HttpRequest, HttpResponse, JsonResponse
def some_fbv(request: HttpRequest) -> HttpResponse:
....
return foo
def some_json_producing_fbv(request: HttpRequest) -> JsonResponse:
...
return foo
Django 存根是维护良好的包,https://github.com/typeddjango/django-stubs。
import typing as t
from django.http import HttpResponseRedirect
from django.shortcuts import render
from django.views import View
from django.http import HttpRequest, HttpResponse, JsonResponse,
HttpResponseRedirect
from .forms import MyForm
# type alias when response is one of these types
RedirectOrResponse = t.Union[HttpResponseRedirect, HttpResponse]
class MyFormView(View):
form_class = MyForm
initial = {'key': 'value'}
template_name = 'form_template.html'
def get(self, request: HttpRequest, *args: Any, **kwargs: Any) -> HttpResponse:
form = self.form_class(initial=self.initial)
return render(request, self.template_name, {'form': form})
def post(self, request: HttpRequest, *args: tuple[Any],
**kwargs: dict[str, t.Union[int, str]]) -> RedirectOrResponse:
form: MyForm = self.form_class(request.POST)
if form.is_valid():
# <process form cleaned data>
return HttpResponseRedirect('/success/')
return render(request, self.template_name, {'form': form})
HttpRequest
映射到函数或方法中的请求变量。HttpResponse, JsonResponse, StreamingResponse, Redirect
将是视图返回的值 function/method。*args, **kwargs
既简单又棘手,因为它可以是 any 值元组或值字典。*args: Any
或*args: tuple[Any]
(如果您知道,也可以使用特定类型)。同样适用于**kwargs
.- 每当传递或返回 class 时,使用
type[cls]
。
更多示例:https://github.com/typeddjango/django-stubs/tree/master/tests