首页 > 解决方案 > 您能否制作一个基于随机变量将用户重定向到另一个应用程序的视图?

问题描述

正如标题所说,我想创建一个基于随机变量将用户重定向到另一个应用程序的函数。

我创建了一个函数并为调用另一个应用程序的相应视图的变量提供了一个随机值,但只有随机范围的第一个值可以正常工作,而另一个在表单验证时出错。

比赛.views:

from django.shortcuts import render
from django import forms
import random
from user.models import UserProfileInfo

from .problems.problem5_1contest.views import problem_one
from .problems.problem5_2contest.views import problem_two
from .problems.problem5_3contest.views import problem_three

def contestproblem1(request):
    return problem_one(request)
def contestproblem2(request):
    return problem_two(request)
def contestproblem3(request):
    return problem_three(request)

def contest(request):
    k = random.randint(1,3)
    if(k == 1):
        return contestproblem1(request)
    if(k == 2):
        return contestproblem2(request)
    if(k == 3):
        return contestproblem3(request)

问题5_1contest.views:

from django.shortcuts import render
from django import forms
from .forms import ProblemOneForm
from .models import ProblemOneContest

from user.models import UserProfileInfo
# Create your views here.

def wrong(request):
    return render(request, 'problem5_1contest/wrong.html')

def correct(request):
    return render(request, 'problem5_1contest/correct.html')


def problem_one(request):
    form = ProblemOneForm()
    form.fields['first'].widget = forms.HiddenInput()
    form.fields['second'].widget = forms.HiddenInput()
    form.fields['solution'].widget = forms.HiddenInput()

    if request.method == 'POST':
        form = ProblemOneForm(request.POST)

        if form.is_valid():
            form.save(commit=True)
            if(int(form.cleaned_data['answer']) == int(form.cleaned_data['solution'])):
                return render(request, 'problem5_1contest/correct.html')
            else:
                return render(request, 'problem5_1contest/wrong.html')
        else:
            print('ERROR')

    return render(request, 'problem1/problem1.html',{ 'form':form } )

问题5_2contest.views:

from django.shortcuts import render
from django import forms
from .forms import ProblemTwoForm
from .models import ProblemTwoContest

from user.models import UserProfileInfo
# Create your views here.

def wrong(request):
    return render(request, 'problem5_2contest/wrong.html')

def correct(request):
    return render(request, 'problem5_2contest/correct.html')


def problem_two(request):
    form = ProblemTwoForm()
    form.fields['solution'].widget = forms.HiddenInput()

    if request.method == 'POST':
        form = ProblemTwoForm(request.POST)

        if form.is_valid():
            form.save(commit=True)
            if(int(form.cleaned_data['answer']) == int(form.cleaned_data['solution'])):
                return render(request, 'problem5_2contest/correct.html')
            else:
                return render(request, 'problem5_2contest/wrong.html')
        else:
            print('ERROR')

    return render(request, 'problem2/problem2.html',{ 'form':form } )

问题5_3contest.views:

from django.shortcuts import render
from django import forms
from .forms import ProblemThreeForm
from .models import ProblemThreeContest

from user.models import UserProfileInfo
# Create your views here.

def wrong(request):
    return render(request, 'problem5_3contest/wrong.html')

def correct(request):
    return render(request, 'problem5_3contest/correct.html')


def problem_three(request):
    form = ProblemThreeForm()

    form.fields['first_digit_one'].widget = forms.HiddenInput()
    form.fields['first_digit_two'].widget = forms.HiddenInput()

    form.fields['second_digit_one'].widget = forms.HiddenInput()
    form.fields['second_digit_two'].widget = forms.HiddenInput()
    form.fields['second_digit_three'].widget = forms.HiddenInput()

    form.fields['third_digit_one'].widget = forms.HiddenInput()
    form.fields['third_digit_two'].widget = forms.HiddenInput()

    form.fields['answer_digit_one'].widget = forms.HiddenInput()
    form.fields['answer_digit_two'].widget = forms.HiddenInput()
    form.fields['answer_digit_three'].widget = forms.HiddenInput()

    if request.method == 'POST':
        form = ProblemThreeForm(request.POST)

        if form.is_valid():
            form.save(commit=True)
            if(int(form.cleaned_data['answer']) != int(form.cleaned_data['answer_digit_one']) + int(form.cleaned_data['answer_digit_two']) + int(form.cleaned_data['answer_digit_three'])):
                return render(request, 'problem5_3contest/wrong.html')
            else:
                return render(request, 'problem5_3contest/correct.html')
        else:
            print('ERROR')

    return render(request, 'problem3/problem3.html',{ 'form':form } )

网址.py:

from django.contrib import admin
from django.urls import path, include
from django.views.generic import TemplateView

from user import views
from classes.views import class5, class6, class7, class8, classes

from contest.views import contest


urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('pwa.urls')),
    path('register/',views.register,name='register'),
    path('login/',views.user_login,name='login'),
    path('logout/', views.user_logout, name='logout'),
    path('home/', views.index, name='home'),
    path('classes/', classes, name='classes'),
    path('class5/', class5, name='class5'),
    path('class6/', class6, name='class6'),
    path('class7/', class7, name='class7'),
    path('class8/', class8, name='class8'),

    path('contest/', contest, name='contest'),

]

比赛.urls.py:

from django.contrib import admin
from django.urls import path, include
from django.views.generic import TemplateView

from contest.problems.problem5_1contest.views import problem_one as contestproblem1
from contest.problems.problem5_2contest.views import problem_two as contestproblem2
from contest.problems.problem5_3contest.views import problem_three as contestproblem3

urlpatterns = [
    path('contest/class5/problemone', contestproblem1),
    path('contest/class5/problemtwo', contestproblem2),
    path('contest/class5/problemthree', contestproblem3),
]

标签: djangodjango-views

解决方案


当表单无效时,您不会返回任何内容。

def problem_one(request):
    ...
    if form.is_valid():
        ...
    else:
        print('ERROR')
    ...
def problem_two(request):
    ...
    if form.is_valid():
        ...
    else:
        print('ERROR')
    ...
def problem_three(request):
    ...
    if form.is_valid():
        ...
    else:
        print('ERROR')
    ...

而不仅仅是打印ERROR,你应该返回一些类似的东西return render(request, 'wrong.html', {'error: 'The form is invalid'})

如果你不返回任何东西,你会得到这个错误,我认为这是你得到的那个。

该视图未返回 HttpResponse 对象。它返回 None 而不是


推荐阅读