Я пытаюсь использовать CBV для отправки OTP для проверки номера зарегистрированного пользователя. Мой код отправляет OTP, однако мне нужно обеспечить следующие случаи.
if request.user.is_staff == True
, а затем перенаправить на какую-нибудь страницу. (Мне нужно перенаправить пользователей, которые уже подтвердили, но это та же логика) if request.session['otp_session']
существует, и его возраст составляет менее 5 минут, а затем отобразить ссылку на страницу «verify_otp». - ps: Здесь я повторил
mobile=self.request.user.mobile
в get (0 и post (). Как мне избежать этого повторения?
Спасибо за все входные данные.
Вот мой взгляд
class SendOTPView(FormView,LoginRequiredMixin):
form_class = SendOTPForm
template_name="users/send_otp.html"
def get(self, request):
mobile=self.request.user.mobile
form = self.form_class()
return render(request, self.template_name, context={'form':form, 'mobile':mobile, 'action': 'send-otp'})
def post(self, request):
mobile=self.request.user.mobile
url = "api-url-to-send-otp"
response = requests.request("GET", url)
data = response.json()
if(data['Status'] =='Success'):
#messages.add_message(request, messages.INFO, 'An OTP has been sent to your registered mobile number.')
request.session['otp_session']={'data': data['Details']}
context={'action':'verify-otp'}
else:
messages.add_message(request, messages.ERROR, 'Something went wrong while sending OTP. Please try again.')
form = SendOTP()
context={'action':'send-otp','form': form}
return render(request, self.template_name, context)
Вот мой шаблон
{% if action == 'send-otp'%}
Get an OTP in your phone ({{mobile}} {{request.user.mobile_verified}}) and verify it.
{% elif action == 'verify-otp'%}
An OTP has been sent to your registered mobile number. Please check it and <a href="{% url 'verify_otp' %}" class="btn btn-outline-primary">Verify here</a>
{% endif %}
{% if form %}
{% crispy form %}
{% endif %}