django CBV: как добавить ограничения доступа? - PullRequest
0 голосов
/ 06 ноября 2019

Я пытаюсь использовать CBV для отправки OTP для проверки номера зарегистрированного пользователя. Мой код отправляет OTP, однако мне нужно обеспечить следующие случаи.

  1. if request.user.is_staff == True, а затем перенаправить на какую-нибудь страницу. (Мне нужно перенаправить пользователей, которые уже подтвердили, но это та же логика)
  2. if request.session['otp_session'] существует, и его возраст составляет менее 5 минут, а затем отобразить ссылку на страницу «verify_otp».
  3. 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 %}
...