有一個端點名為 的 URL 'otp/',我不希望用戶直接訪問此端點,我希望它們按照我的代碼的指示(在需要時)
我該怎么做?
這是我的代碼
class OTPView(View):
def get(self, request, *args, **kwargs):
otp_form = OTP_Form()
return render(request, 'otp.html', {'otp_form': otp_form})
def post(self, request, *args, **kwargs):
try:
otp = request.session.get('otp')
first_name = request.session.get('first_name')
last_name = request.session.get('last_name')
password = request.session.get('password')
phone = request.session.get('phone')
otp_form = OTP_Form(request.POST)
if otp_form.is_valid():
get_otp = otp_form.cleaned_data['otp']
if get_otp == otp:
user = MyUser.objects.create_user(
phone=phone, password=password, first_name=first_name, last_name=last_name)
user.save()
otp_entry = OTP.objects.create(user_id=user, otp=otp)
otp_entry.save()
delete_session(request)
messages.success(
request, 'Your account has been created')
return redirect('login')
else:
messages.error(request, 'Incorrect OTP')
return redirect('otp')
else:
messages.error(request, 'Please enter the OTP again')
return redirect('otp')
except:
messages.error(request, 'Please try signing up again')
return redirect('signup')
網址.py
path('otp/', OTPView.as_view(), name='otp'),
我希望用戶注冊后立即訪問此端點
請給我一些建議
uj5u.com熱心網友回復:
有一種簡單的方法可以在 get 方法檢查參考者中做到這一點:
def get(self, request, *args, **kwargs):
if request.META['HTTP_REFERER'] != '/mylogin/':
return HttpResponseForbidden()
otp_form = OTP_Form()
return render(request, 'otp.html', {'otp_form': otp_form})
您需要檢查參考網址是否是您的注冊網址
uj5u.com熱心網友回復:
這個想法本身聽起來很奇怪,這不是 HTTP 應該如何作業的。您可以根據權限而不是狀態來限制視圖。考慮將這樣的邏輯放在函式中而不是視圖中,或者根據一些資訊在視圖內部進行一些條件檢查(例如,您可以將資料存盤在會話或 cookie 中,然后在視圖中進行檢查)。
uj5u.com熱心網友回復:
如果您不希望它成為 API 并且只想在代碼內部處理它,則無需將此函式注冊到任何路由路徑。只需在用戶注冊后將其用作信號即可。
Django 信號:https ://docs.djangoproject.com/en/4.0/topics/signals/
post_save信號可能對您的情況有所幫助。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/498003.html
