찾다

 >  Q&A  >  본문

python - 如何优雅地实现django的登录/注册?

我是看的Django Book的教程,然后用最原始的方式实现的。请问关于登录和注册,Django有没有封装像ListView, DetailView, FormView这样的class来直接实现呢?


这是login代码的实现

def user_login(request):
    if request.POST:
        username = password = ''
        username = request.POST.get('username')
        password = request.POST.get('password')
        user = authenticate(username=username, password=password)
        if user is not None and user.is_active:
            login(request, user)
            return redirect('/')
    else:
        context = {}
        return render(request, 'account/login.html', context)

这是register代码的实现 

def user_register(request):
    if request.method == "POST":
        register_form = UserForm(request.POST)
        if register_form.is_valid():
            username = register_form.cleaned_data['username']
            password = register_form.cleaned_data['password']
            email = register_form.cleaned_data['email']

            user = User.objects.create_user(username, email, password)
            user.save()

            login(request, authenticate(username=username, password=password))
            return redirect('/')
    else:
        register_form = UserForm()
        context = {'register_form': register_form}
        return render(request, 'account/register.html', context)

这是logout代码的实现

def user_logout(request):
    logout(request)
    return redirect('/')

一般在实际开发过程中会采用什么方法实现登录/注册/登出呢?

迷茫迷茫2813일 전674

모든 응답(2)나는 대답할 것이다

  • 黄舟

    黄舟2017-04-18 09:47:54

    먼저 로그인할 때 프런트엔드에 대한 세션이나 쿠키를 계산해야 합니다. 로그인을 하면 프런트엔드에서 계산된 세션이나 쿠키를 가지고 와서 로그인했다고 합니다. 내 로그인 자격 증명을 입력한 후 서버가 이를 가져온 후 내가 계산한 것과 동일한지 계산합니다. 그렇다면 정상적으로 로그인된 것입니다. 단순히 페이지로 이동하는 대신 정보가 반환되지 않습니다.

    등록이 필요한 것은 당연합니다. . 계정 비밀번호를 데이터베이스에 기록한 다음 로그인할 때 다시 사용하고, 정확하다면 로그인으로 이동하세요.

    로그아웃이란 쿠키, 세션 새로고침 등 사용자의 로그인 정보를 삭제하는 것을 의미합니다. 감지되지 않을 경우 로그인 페이지에 접속할 수 없으므로 그냥 점프하여 로그인 페이지로 리디렉션하면 됩니다.

    회신하다
    0
  • 巴扎黑

    巴扎黑2017-04-18 09:47:54

    프런트 엔드에서 전달된 사용자 이름과 비밀번호를 확인해야 하나요?

    으아악

    등록과 동일

    회신하다
    0
  • 취소회신하다