상황:
고객용으로 회원가입시 고객 그룹인 "client"가 자동으로 추가되고,
업체용인 경우는 "partner"가 그룹으로 추가되도록 한다.
(매개변수 활용)
1) 고객용 회원가입 페이지 접속시 "client" 값을 인자로 지정한다.
1 2 3 | def signup(request): ctx = { "is_client" : True } return common_signup(request, ctx, "client") | cs |
2-1) group 매개변수를 통해 "client" 인자를 넘겨 받고, user에 "client" 그룹을 추가한다.
2-2) Group 클래스는 User 클래스와 ManyToMany 관계로 user.groups로 데이터 접근이 가능하다.
1 2 3 4 5 6 7 8 9 10 11 | def common_signup(request, ctx, group): if request.method == "GET": pass elif request.method == "POST": username = request.POST.get("username") email = request.POST.get("email") password = request.POST.get("password") user = User.objects.create_user(username, email, password) target_group = Group.objects.get(name=group) user.groups.add(target_group) | cs |
3) client로 회원가입한 경우 고객용 로그인 페이지, partner로 가입한 경우 업체용 페이지로 리다이렉트한다.
1 2 3 4 5 6 | if group == "partner": return redirect("/partner/login/") else: return redirect("/login/") return render(request, "signup.html", ctx) | cs |
4) 고객용 회원가입은 인자를 "partner"로 변경하면 된다.
1 2 3 | def signup(request): ctx = {} return common_signup(request, ctx, "partner") | cs |
**
상황:
고객이 로그인 시도할 경우 고객 그룹 소속여부에 따라 로그인처리를 한다.
고객 그룹이 아닐시 "접근 불가" 메세지를 노출시킨다.
1)
1 2 3 | def login(request): ctx = { "is_client" : True } return common_login(request, ctx, "client") | cs |
2) group 매개변수로 받은 "client" 인자와 조건문을 통해 해당 유저가 속한 그룹과 대조를 한다. 실패시 에러메세지를 출력한다.
1 2 3 4 5 6 7 8 9 10 | def common_login(request, ctx, group): if request.method == "GET": pass elif request.method == "POST": username = request.POST.get("username") password = request.POST.get("password") user = authenticate(username=username, password=password) if user is not None: if group not in [group.name for group in user.groups.all()]: ctx.update({ "error" : "접근 권한이 없습니다." }) | cs |
3) 로그인에 성공시 속한 그룹에 따라 메인페이지를 달리한다.
1 2 3 4 5 6 7 8 9 10 | else: auth_login(request, user) next_value = request.GET.get("next") if next_value: return redirect(next_value) else: if group == "partner": return redirect("/partner/") else: return redirect("/") | cs |
'코딩 연습 > Django' 카테고리의 다른 글
urls.py에서 인증 시스템(로그인, 로그아웃) 호출하여 사용하기 (0) | 2018.12.19 |
---|---|
pip 라이브러리 정리 및 클론하기 (0) | 2018.12.11 |
공통된 2개 뷰 함수를 1개로 만들어 호출해서 사용하기 (0) | 2018.12.06 |
조건에 따라 링크 페이지 노출 (0) | 2018.12.06 |
그룹에 속한 사용자만 접속 가능한 페이지 (0) | 2018.12.05 |