Я создаю регистрационную форму в Django 2.1. В типичных примерах люди используют один и тот же метод представлений как для отображения форм, так и для приема запроса POST из следующих форм:
В urls.py:
urlpatterns = [
path('auth/register', auth.register, name='register')
]
и в представлении с именем auth.py:
from django.shortcuts import render
from blog_admin.forms import SignUpForm
from django.contrib.auth.forms import UserCreationForm
def register(request):
if request.method == 'POST':
form = UserCreationForm(request.POST)
if form.is_valid():
# do registration stuff...
else:
form = SignUpForm()
return render(request, 'blog_admin/auth/register.html', {'form': form})
но я хочу использовать отдельный метод для отображения формы и обработки процесса регистрации, а также хочу использовать идентичный urlpatterns, один с GET и другой с функциями POST, как показано ниже:
в urls.py
urlpatterns = [
# can we limit it range, so that it only works for GET request
path('auth/register', auth.show_registration_form, name='register_show'),
# can we limit it range, so that it only works for POST request
path('auth/register', auth.register, name='register')
]
и в представлении с именем auth.py:
from django.shortcuts import render
from blog_admin.forms import SignUpForm
from django.contrib.auth.forms import UserCreationForm
def show_registration_form(request):
form = SignUpForm()
return render(request, 'blog_admin/auth/register.html', {'form': form})
def register(request):
# do registration stuff...
Если вам понадобится еще один пример из других фреймворков, в phpLaravel это можно было бы сделать следующим образом:
Route::get('auth/register', ['as' => 'register_show', 'uses' => 'Auth\AuthController@show_registration_form']);
Route::post('auth/register', ['as' => 'register', 'uses' => 'Auth\AuthController@register']);
См., Например, здесь: docs.djangoproject.com/en/2.1/topics/class-based-views/intro /…
Спасибо, попробую :)






Обычно для разделения
GET,POST(и других методов) используются представления на основе классов.