Exemplo n.º 1
0
def signup(request):
    sign_up_page = request.COOKIES.get(SIGN_UP_PAGE, SIGN_UP_PAGE_FIRST)
    sign_up_get_form = SignUpForm1() if sign_up_page == SIGN_UP_PAGE_FIRST \
        else SignUpForm2() if sign_up_page == SIGN_UP_PAGE_SECOND \
        else SignUpForm3() if sign_up_page == SIGN_UP_PAGE_THIRD \
        else SignUpForm4()

    if request.method == GET:
        sign_up_stage_page = ugettext_lazy("Регистрация - этап {}")
        sign_up_stage_page = sign_up_stage_page.format(sign_up_page)
        submit_value = ugettext_lazy("Далее")
        has_error, error = request.COOKIES.get(SIGN_UP_COOKIE_ERROR, IS_OK), NONE
        if sign_up_page == SIGN_UP_PAGE_SECOND:
            sign_up_get_form.fields[PHONE_NUMBER].initial = "+7"
            submit_value = ugettext_lazy("Получить код")
            if has_error == IS_NOT_OK:
                error = ugettext_lazy("Уже существует аккаунт с таким номером телефона или номер телефона некорректен")
        elif sign_up_page == SIGN_UP_PAGE_THIRD:
            sign_up_get_form.fields[PHONE_NUMBER].initial = request.COOKIES.get(SIGN_UP_COOKIE_PHONE_NUMBER)
            submit_value = ugettext_lazy("Подтвердить код")
            if has_error == IS_NOT_OK:
                error = ugettext_lazy("Введенный код не подтвержден")
        elif sign_up_page == SIGN_UP_PAGE_FOURTH:
            sign_up_get_form.fields[PHONE_NUMBER].initial = request.COOKIES.get(SIGN_UP_COOKIE_PHONE_NUMBER)
            sign_up_get_form.fields[CODE_FOR_PHONE_NUMBER].initial = request.COOKIES.get(SIGN_UP_COOKIE_PHONE_NUMBER_CODE)
            submit_value = ugettext_lazy("Создать аккаунт")
        context = {
            FORM: sign_up_get_form,
            STAGE: sign_up_stage_page,
            SUBMIT_VALUE: submit_value,
            ERROR: error
        }
        response = render(request, "sportsmen/signup.html", context=context)
        response.set_cookie(SIGN_UP_COOKIE_ERROR, IS_OK, max_age=SIGN_UP_PAGE_COOKIE_AGE)
        return response
    elif request.method == POST:
        sign_up_post_form = SignUpForm1(request.POST) if sign_up_page == SIGN_UP_PAGE_FIRST \
                        else SignUpForm2(request.POST) if sign_up_page == SIGN_UP_PAGE_SECOND \
                        else SignUpForm3(request.POST) if sign_up_page == SIGN_UP_PAGE_THIRD \
                        else SignUpForm4(request.POST)
        
        if sign_up_page == SIGN_UP_PAGE_FIRST:
            if sign_up_post_form.is_valid():
                response = redirect("signup")
                response.set_cookie(
                    SIGN_UP_PAGE,
                    SIGN_UP_PAGE_SECOND,
                    max_age=SIGN_UP_PAGE_COOKIE_AGE
                )
                response.set_cookie(
                    SIGN_UP_COOKIE_FIRST_NAME,
                    "|".join(str(ord(element)) for element in sign_up_post_form.cleaned_data[FIRST_NAME]),
                    max_age=SIGN_UP_PAGE_COOKIE_AGE
                )
                response.set_cookie(
                    SIGN_UP_COOKIE_LAST_NAME,
                    "|".join(str(ord(element)) for element in sign_up_post_form.cleaned_data[LAST_NAME]),
                    max_age=SIGN_UP_PAGE_COOKIE_AGE
                )
                response.set_cookie(
                    SIGN_UP_COOKIE_DAY,
                    sign_up_post_form.cleaned_data[DAY],
                    max_age=SIGN_UP_PAGE_COOKIE_AGE
                )
                response.set_cookie(
                    SIGN_UP_COOKIE_MONTH,
                    sign_up_post_form.cleaned_data[MONTH],
                    max_age=SIGN_UP_PAGE_COOKIE_AGE
                )
                response.set_cookie(
                    SIGN_UP_COOKIE_YEAR,
                    sign_up_post_form.cleaned_data[YEAR],
                    max_age=SIGN_UP_PAGE_COOKIE_AGE
                )
                response.set_cookie(
                    SIGN_UP_COOKIE_GENDER,
                    sign_up_post_form.cleaned_data[GENDER],
                    max_age=SIGN_UP_PAGE_COOKIE_AGE
                )
                return response
        elif sign_up_page == SIGN_UP_PAGE_SECOND:
            response = redirect("signup")

            is_valid, country_region, phone_number = True, request.POST.get(COUNTRY_REGION), request.POST.get(PHONE_NUMBER)
            if (country_region == "+380" and len(phone_number) < 18) or \
               (country_region == "+375" and len(phone_number) < 17) or \
               (country_region == "+77" and len(phone_number) < 16) or \
               (country_region == "+7" and len(phone_number) < 16):
                is_valid = False

            if sign_up_post_form.is_valid() and is_valid:
                try:
                    Sportsman.manager.get(phone_number=sign_up_post_form.cleaned_data[PHONE_NUMBER])
                    response.set_cookie(
                        SIGN_UP_COOKIE_ERROR,
                        IS_NOT_OK,
                        max_age=SIGN_UP_PAGE_COOKIE_AGE
                    )
                    return response
                except ObjectDoesNotExist:
                    response.set_cookie(
                        SIGN_UP_PAGE,
                        SIGN_UP_PAGE_THIRD,
                        max_age=SIGN_UP_PAGE_COOKIE_AGE
                    )
                    response.set_cookie(
                        SIGN_UP_COOKIE_PHONE_NUMBER,
                        sign_up_post_form.cleaned_data[PHONE_NUMBER],
                        max_age=SIGN_UP_PAGE_COOKIE_AGE
                    )

                    send_code_to_activate_phone_number.delay(sign_up_post_form.cleaned_data[PHONE_NUMBER])

                    return response
            response.set_cookie(
                SIGN_UP_COOKIE_ERROR,
                IS_NOT_OK,
                max_age=SIGN_UP_PAGE_COOKIE_AGE
            )
            return response

        elif sign_up_page == SIGN_UP_PAGE_THIRD:
            if sign_up_post_form.is_valid():
                code_for_phone_number = sign_up_post_form.cleaned_data[CODE_FOR_PHONE_NUMBER]
                phone_number = request.COOKIES.get(SIGN_UP_COOKIE_PHONE_NUMBER)
                phone_number_verified = send_code_to_verify_phone_number(phone_number, code_for_phone_number)
                response = redirect("signup")

                if phone_number_verified:
                    response.set_cookie(
                        SIGN_UP_PAGE,
                        SIGN_UP_PAGE_FOURTH,
                        max_age=SIGN_UP_PAGE_COOKIE_AGE
                    )
                    response.set_cookie(
                        SIGN_UP_COOKIE_PHONE_NUMBER_CODE,
                        code_for_phone_number,
                        max_age=SIGN_UP_PAGE_COOKIE_AGE
                    )
                else:
                    response.set_cookie(
                        SIGN_UP_COOKIE_ERROR,
                        IS_NOT_OK,
                        max_age=SIGN_UP_PAGE_COOKIE_AGE
                    )
                return response
        elif sign_up_page == SIGN_UP_PAGE_FOURTH:
            if sign_up_post_form.is_valid():
                first_name_cookie = request.COOKIES.get(SIGN_UP_COOKIE_FIRST_NAME).split("|")
                last_name_cookie = request.COOKIES.get(SIGN_UP_COOKIE_LAST_NAME).split("|")
                first_name_cookie = [int(element) for element in first_name_cookie if element]
                last_name_cookie = [int(element) for element in last_name_cookie if element]

                user = User()
                user.save()
                user.username = user.pk
                user.first_name = "".join(map(chr, first_name_cookie))
                user.last_name = "".join(map(chr, last_name_cookie))
                user.set_password(sign_up_post_form.cleaned_data[PASSWORD])
                user.save()
                sportsman = Sportsman()
                sportsman.phone_number = request.COOKIES.get(SIGN_UP_COOKIE_PHONE_NUMBER)
                sportsman.gender = request.COOKIES.get(SIGN_UP_COOKIE_GENDER)
                sportsman.birthday = datetime(
                    int(request.COOKIES.get(SIGN_UP_COOKIE_YEAR)),
                    int(request.COOKIES.get(SIGN_UP_COOKIE_MONTH)),
                    int(request.COOKIES.get(SIGN_UP_COOKIE_DAY))
                ).date()
                sportsman.avatar = "man.png" if request.COOKIES.get(SIGN_UP_COOKIE_GENDER) == "1" else "woman.png"
                sportsman.athlete = user
                sportsman.save()
                rating = Rating()
                rating.athlete = user
                rating.save()
                log_in(request, user)

                response = redirect("sportsmen-index")
                response.set_cookie(
                    SIGN_UP_PAGE,
                    SIGN_UP_PAGE_FIRST,
                    max_age=SIGN_UP_PAGE_COOKIE_AGE
                )
                return response
        return redirect("signup")