함수의 매개변수와 문자열을 조합하여 한 줄의 문장을 만들었다.

(https://practice-a-lot.tistory.com/79)


1
2
3
4
5
6
7
8
9
function sayhello(name, age) {
  console.log("Hello"+','name+"!""Are you", age+"?");
}
 
sayhello("Ryan"31)
sayhello("Adrianne"31)
sayhello("Kaori"26)
sayhello("Bobby"25)
 
cs



매개변수를 사용하기 위해 전혀 아름답지 않게 곳곳에 따옴표(')나 쌍따옴표(")를 사용해야했다.


여기서 백틱(`)을 사용하여 한 줄의 아름다운 코드가 완성된다.


1
2
3
4
5
6
7
8
function sayhello(name, age) {
  console.log(`Hello ${name}!  Are you ${age}?`);
}
 
sayhello("Ryan"31)
sayhello("Adrianne"31)
sayhello("Kaori"26)
sayhello("Bobby"25)
cs


백틱(')으로 묶은 문자열 속에 ${매개변수} 형태로 매개변수까지 넣을 수 있다.


1
2
3
4
5
>>
Hello Ryan!  Are you 31?
Hello Adrianne!  Are you 31?
Hello Kaori!  Are you 26?
Hello Bobby!  Are you 25?
cs


생소한 백틱(`)과 ${}를 활용하면 된다.

블로그 이미지

쵸잇

,

상황:

고객용으로 회원가입시 고객 그룹인 "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


블로그 이미지

쵸잇

,


상황:

현재 고객용, 업체용 로그인 view 함수가 넘겨주는 ctx를 제외한 나머지가 동일하다.

굳이 똑같은 코드를 2번이나 사용할 필요가 없으므로 1개로 줄이고 서로 호출해서 사용하고자한다.



1-1) login 함수의 내용을 common_login 함수로 옮긴다. 


1-2) 고객용 로그인에서 업체용 링크를 배치시켜야하므로 ctx를 매개변수로 포함시킨다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
def common_login(request, ctx):
    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:
            auth_login(request, user)
            next_value = request.GET.get("next")
            if next_value:
                return redirect(next_value)
            else:
                return redirect("/partner/")
 
        else:
            ctx.update({ "error" : "존재하지 않는 사용자입니다." })
 
    return render(request, "login.html", ctx)
cs



2-1) common_login 함수를 호출하여 사용한다. 


2-2) ctx도 같이 넘겨준다.


1
2
3
def login(request):
    ctx = { "is_client" : True }
    return common_login(request, ctx)
cs


3) 회원가입 페이지도 마찬가지로 하나로 줄여서 호출해서 사용하며, 업체용 view에서는 로그인 함수를 import하여 사용한다.

블로그 이미지

쵸잇

,