๋ณธ ํ”„๋กœ์ ํŠธ๋Š” ํŒจ์บ  ๊ฐ•์˜๋ฅผ ์ฐธ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 

<์ด์ „ ๊ธ€>

https://silvercoding.tistory.com/15

 

[DJANGO ๊ธฐ์ดˆ] 5. Static ํŒŒ์ผ ๊ด€๋ฆฌ, ๋ถ€ํŠธ์ŠคํŠธ๋žฉ CSS ํ…Œ๋งˆ ์ ์šฉ

๋ณธ ํ”„๋กœ์ ํŠธ๋Š” ํŒจ์บ  ๊ฐ•์˜๋ฅผ ์ฐธ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. <์ด์ „ ๊ธ€> https://silvercoding.tistory.com/14 https://silvercoding.tistory.com/13 https://silvercoding.tistory.com/12 https://silvercoding.tistory.com/11 [D..

silvercoding.tistory.com

 

 

์„ธ์…˜ 

ํด๋ผ์ด์–ธํŠธ <------------------> ์„œ๋ฒ„ 

ํด๋ผ์ด์–ธํŠธ ์•ˆ์— ์ฟ ํ‚ค๊ฐ€ ๋“ค์–ด์žˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์ฟ ํ‚ค๋Š” ์ €์žฅ์†Œ์™€ ๊ฐ™๋‹ค.  ์›น ๋ธŒ๋ผ์šฐ์ € ์•ˆ์— ์ฟ ํ‚ค๋ผ๋Š” ์ €์žฅ๊ณต๊ฐ„์ด ์žˆ๋Š”๋ฐ ์ด ์ €์žฅ๊ณต๊ฐ„์„ ํ™œ์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. 

 

๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ผœ์„œ ์„œ๋ฒ„์— ์š”์ฒญ์„ํ•˜๊ณ , ์‘๋‹ต์„ ๋ฐ›๋Š”๋‹ค. ์„œ๋ฒ„์—์„œ๋Š” ํ—ค๋”์— ์ฟ ํ‚ค ์ •๋ณด๋ฅผ ๋„ฃ์–ด์„œ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „๋‹ฌํ•œ๋‹ค.  ํด๋ผ์ด์–ธํŠธ๋Š” ๊ทธ ์ •๋ณด๋ฅผ ์ฟ ํ‚ค์— ์ €์žฅํ•œ๋‹ค. 

 

์„œ๋ฒ„ ์•ˆ์—์„œ๋Š” ์ฟ ํ‚ค๋กœ ์‚ฌ์šฉํ•  ํ‚ค๋ฅผ ๋งŒ๋“ ๋‹ค. ์ด๊ฑธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•˜๊ณ  ํด๋ผ์ด์–ธํŠธ์— ์•Œ๋ ค์ค€๋‹ค. ํด๋ผ์ด์–ธํŠธ๋Š” ์ž๊ธฐ ์ฟ ํ‚ค ์ €์žฅ์†Œ์— ์ €์žฅํ•œ๋‹ค. ์›น์‚ฌ์ดํŠธ ๋ณ„๋กœ ๋‚˜๋ˆ„์–ด์„œ ์ €์žฅํ•˜๊ฒŒ ๋œ๋‹ค.  

 

 ์ด์ •๋ฆฌ --->  1. (ํด๋ผ์ด์–ธํŠธ) ์‚ฌ์ดํŠธ์— ๋“ค์–ด๊ฐ€๋ฉด ์„œ๋ฒ„์— ์š”์ฒญ

2. (์„œ๋ฒ„) ์„œ๋ฒ„ ์•ˆ์—์„œ๋Š” ์ƒˆ๋กœ์šด ํ‚ค๋ฅผ ์ƒ์„ฑํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋„ฃ์€ ํ›„, ๊ทธ ํ‚ค๋ฅผ ํด๋ผ์ด์–ธํŠธ์— ์ „๋‹ฌํ•œ๋‹ค. 

3. (ํด๋ผ์ด์–ธํŠธ) ํด๋ผ์ด์–ธํŠธ๋Š” ๊ฐ๊ฐ์˜ ์›น์‚ฌ์ดํŠธ์— ํ•ด๋‹นํ•˜๋Š” ํ‚ค๋ฅผ ์ฟ ํ‚ค์— ์ €์žฅํ•œ๋‹ค.

4. (ํด๋ผ์ด์–ธํŠธ) ๋‹ค์Œ๋ถ€ํ„ฐ ์›น์‚ฌ์ดํŠธ์— ๋“ค์–ด๊ฐ€๋ฉด ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ•˜๋Š” ๋ชจ๋“  ์š”์ฒญ์— ์ด ์ฟ ํ‚ค๋ฅผ ๊ฐ™์ด ๋ณด๋‚ธ๋‹ค.

5. (์„œ๋ฒ„) ๊ทธ๋Ÿผ ์„œ๋ฒ„๋Š” ๊ทธ ์ฟ ํ‚ค์— ํ•ด๋‹นํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๊บผ๋‚ด์™€์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค. 

 

์–ด๋ ต๊ณ  ๋ณต์žกํ•ด๋ณด์ธ๋‹ค. ํ•˜์ง€๋งŒ ์žฅ๊ณ ์—์„œ ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ๊ต‰์žฅํžˆ ์‰ฌ์›Œ๋ณด์ธ๋‹ค.

 

 

 

 

๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๊ตฌํ˜„

1. Template ์ž‘์„ฑ 

templates ---> login.html  ํŒŒ์ผ ์ƒ์„ฑ 

ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€์™€ ๋น„์Šทํ•œ ๊ตฌ์„ฑ์ด๋ฏ€๋กœ register.html  ์„ ๋ณต๋ถ™ํ•ด์™€์„œ ์ˆ˜์ •์„ ์กฐ๊ธˆ ํ•ด์ค€๋‹ค. 

<html>

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <link rel="stylesheet" href="/static/bootstrap.min.css" />
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/js/bootstrap.bundle.min.js" integrity="sha384-gtEjrD/SeCtmISkJkNUaaKMoLD0//ElJ19smozuHV6z3Iehds+3Ulb9Bn9Plx0x4" crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.9.2/dist/umd/popper.min.js" integrity="sha384-IQsoLXl5PILFhosVNubq5LC7Qb9DXgDA9i+tQ8Zj3iwWAwPtgFTxbJ8NT4GN1R8p" crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/js/bootstrap.min.js" integrity="sha384-Atwg2Pkwv9vp0ygtn1JAojH0nYbwNJLPhwyoVbhoPwBhjQPR5VtM2+xf0Uwh9KtT" crossorigin="anonymous"></script>
</head>

<body>
    <div class="container">
        <div class="row-mt5">
            <div class="col-12 text-center">
                <h1>๋กœ๊ทธ์ธ</h1>
            </div>
        </div>
        <div class="row mt-5">
            <div class="col-12">
                {{error}}
            </div>
        </div>
        <div class="row mt-5">
            <form method="POST" action=".">
                {% csrf_token %}
                <div class="form-group mb-3">
                    <label for="username" class="form-label">์‚ฌ์šฉ์ž ์ด๋ฆ„</label>
                    <input type="text" class="form-control" id="username" placeholder="์‚ฌ์šฉ์ž ์ด๋ฆ„" name="username">
                </div>
                <div class="form-group mb-3">
                    <label for="password" class="form-label">๋น„๋ฐ€๋ฒˆํ˜ธ</label>
                    <input type="password" class="form-control" id="password" placeholder="๋น„๋ฐ€๋ฒˆํ˜ธ" name="password">
                </div>
                <button type="submit" class="btn btn-primary">๋กœ๊ทธ์ธ</button>
            </form>
        </div>
    </div>

</body>

</html>

์‚ฌ์šฉ์ž ์ด๋ฆ„, ๋น„๋ฐ€๋ฒˆํ˜ธ๋งŒ ๋‚จ๊ฒจ๋†“๋Š”๋‹ค. 

 

 

 

 

 

 

2. View ์ž‘์„ฑ

community ---> user ---> views.py 

login ํ•จ์ˆ˜๋ฅผ ์ƒ์„ฑ ํ•ด์ค€๋‹ค. 

def login(request):
    return render(request, 'login.html')

์šฐ์„  login.html ๊ณผ ์—ฐ๊ฒฐํ•ด์ฃผ์—ˆ๋‹ค. 

 

 

 

 

 

3. Url ์—ฐ๊ฒฐ 

community ---> user ---> urls.py

urlpatterns = [
	...
    path('login/', views.login),
]

์–ด๋–ค ์ฃผ์†Œ๋ฅผ ์—ฐ๊ฒฐํ–ˆ์„ ๋•Œ ์œ„์—์„œ ๋งŒ๋“  view๋ฅผ ์—ฐ๊ฒฐํ•ด ์ค„๊ฑด์ง€ ์ž‘์„ฑํ•˜๋Š” ์ฝ”๋“œ์ด๋‹ค. ์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ•˜๋ฉด .../user/login/ ์ด๋ผ๋Š” ์ฃผ์†Œ๋ฅผ ์น˜๋ฉด ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๋กœ ๋“ค์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค. 

 

 

์šฐ์„  ์—ฌ๊ธฐ๊นŒ์ง€ ํ•ด์„œ ํ™•์ธํ•ด๋ณด์ž. 

ํ•ด๋‹น ์ฃผ์†Œ์— ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ๋‹ค. 

 

 

 

 

 

4. ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ ์ž‘์„ฑ 

--- check password 

community ---> user ---> views.py 

check_password importํ•ด์„œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ํ™•์ธํ•ด์ค€๋‹ค. 

def login(request):
    if request.method == 'GET':
        return render(request, 'login.html')
    elif request.method == 'POST':
        username = request.POST.get('username', None)
        password = request.POST.get('password', None)

        res_data = {}
        if not (username and password):
            res_data['error'] = "๋ชจ๋“  ๊ฐ’์„ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”."
        else:
            fcuser = User.objects.get(username = username)
            if check_password(password, fcuser.password):
                pass
            
            else: 
                res_data['error'] = "๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ํ‹€๋ ธ์Šต๋‹ˆ๋‹ค."

        return render(request, 'login.html', res_data)

๊ฐ’์„ ๋ชจ๋‘ ์ž…๋ ฅํ•˜์ง€ ์•Š๊ฑฐ๋‚˜, ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ํ‹€๋ฆฌ๊ฒŒ ์ž…๋ ฅํ–ˆ์„ ๊ฒฝ์šฐ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ๋„์šด๋‹ค. 

๋กœ๊ทธ์ธ์— ์„ฑ๊ณตํ–ˆ์„ ๋•Œ๋Š” ์šฐ์„  pass๋กœ ๋‚จ๊ฒจ๋†“๊ณ  ํ™•์ธ์„ ํ•ด๋ณด์ž. 

 

 

์‹คํ—˜์„ ํ•ด๋ณด๋‹ˆ ๋ชจ๋‘ ์ž˜ ๋‚˜์˜ค๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. 

 

 

 

--- Session ํ™œ์šฉํ•˜์—ฌ ๋กœ๊ทธ์ธ 

๊ทธ๋‹ค์Œ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ผ์น˜ํ–ˆ์„ ๋•Œ์˜ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์ค€๋‹ค. ์—ฌ๊ธฐ์„œ ์„ธ์…˜์„ ํ™œ์šฉํ•œ๋‹ค.

community ---> user ---> views.py

 ...
 if check_password(password, fcuser.password):
                request.session['user'] = user.id 
                
                return redirect('/')
 ...

์ „ ์ฝ”๋“œ์—์„œ pass๋ถ€๋ถ„๋งŒ ๊ณ ์ณ์ค€๋‹ค. ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ์ผ์น˜ํ•˜๋ฉด ๋กœ๊ทธ์ธ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ๋Š” ์ฝ”๋“œ์ด๋‹ค. request.session์€ ๋”•์…”๋„ˆ๋ฆฌ ์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. user๋ผ๋Š” key์— user์˜ id ๊ฐ’์„ ๋„ฃ์–ด ์ฃผ๊ณ , ํŽ˜์ด์ง€์˜ ํ™ˆํ™”๋ฉด์œผ๋กœ ๊ฐ€๋Š” ์ฝ”๋“œ redirect('/')๋ฅผ ์ž‘์„ฑํ•ด ์ฃผ์—ˆ๋‹ค. ๋‚ด๋ถ€์ ์œผ๋กœ ๋กœ๊ทธ์ธ์ด ๋˜๋Š” ๊ณผ์ •์€ ๋ณต์žกํ•ด๋ณด์˜€์ง€๋งŒ, ์žฅ๊ณ ๋ฅผ ํ™œ์šฉํ•˜๋ฉด ์ด๋ ‡๊ฒŒ ๋ฐ์ดํ„ฐ ์ €์žฅ๋งŒ ํ•ด์ฃผ๋ฉด ์•Œ์•„์„œ ์ฒ˜๋ฆฌ๊ฐ€ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ํŽธ๋ฆฌํ•˜๋‹ค. 

 

 

 

community ---> user ---> views.py

home ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•ด์ค€๋‹ค. 

def home(request):
    user_id = request.session.get('user')
    if user_id:
        user = User.objects.get(pk=user_id)
        return HttpResponse(user.username + "๋‹˜ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค!")

    return HttpResponse("Home!")

session์—์„œ ์ €์žฅํ•ด๋‘์—ˆ๋˜ user key๋ฅผ ๋ฐ›์•„์™€ user_id์— ์ €์žฅํ•ด์ฃผ๊ณ , ๊ทธ์— ํ•ด๋‹นํ•˜๋Š” User๋ชจ๋ธ ๊ฐ์ฒด๋ฅผ user์— ์ €์žฅํ•œ๋‹ค. h๋กœ๊ทธ์ธ์— ์„ฑ๊ณตํ•œ๋‹ค๋ฉด ๊ทธ user์˜ username์„ HttpResponse๋กœ ๋„์›Œ์ฃผ๋Š” ์ฝ”๋“œ์ด๋‹ค. 

 

 

 

 

community ---> urls.py 

์ด๋ฒˆ์—” user์•ˆ์˜ url์ด ์•„๋‹Œ community ์•ˆ์˜ url ํŒŒ์ผ์„ ์—ด์–ด์ค€๋‹ค.

urlpatterns = [
   ...
    path('', home)
]

url์— ์•„๋ฌด๊ฒƒ๋„ ๋ถ™์ด์ง€ ์•Š์•˜์„ ๋•Œ home ๋ทฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š” ์ฝ”๋“œ๊นŒ์ง€ ๋งˆ์ณค๋‹ค. ํ™•์ธํ•ด๋ณด์ž!

 

๊ทธ๋ƒฅ ์„œ๋ฒ„์— ๋“ค์–ด๊ฐ€๋ฉด Home!, ๋กœ๊ทธ์ธ์„ ํ•˜๋ฉด username์ด ์ž˜ ๋„์›Œ์ง„๋‹ค. 

 

 

 

 

*** ๋‚ด๋ถ€์ ์œผ๋กœ๋Š”

๊ฐœ๋ฐœ์ž๋„๊ตฌ(F12) ๋ฅผ ํ‚ค๋ฉด application ํƒญ ---> cookie ---> sessionid ---> ํ•˜๋‚˜์˜ ์‹๋ณ„์ž ๊ฐ€ ์ €์žฅ๋˜์–ด ์žˆ๋‹ค.

์›นํŽ˜์ด์ง€๊ฐ€ ํด๋ผ์ด์–ธํŠธ๋ฅผ ์‹๋ณ„ํ•˜๋Š” ์‹๋ณ„์ž์ธ ๊ฒƒ์ด๋‹ค. 

 

 

 

 

 

๊ฐ„๋‹จํ•œ ๋กœ๊ทธ์•„์›ƒ ๊ตฌํ˜„ 

community ---> user ---> view.py 

logout ํ•จ์ˆ˜ ์ž‘์„ฑ 

def logout(request):
    if request.session.get('user'):
        del (request.session['user'])

    return redirect('/')

๊ฐ„๋‹จํ•˜๊ฒŒ ์„ธ์…˜์— user ํ‚ค๊ฐ’์ด ์ €์žฅ๋˜์–ด ์žˆ์œผ๋ฉด ๊ทธ๊ฒƒ์„ ์ง€์šฐ๋Š” ์ฝ”๋“œ์ด๋‹ค. 

 

 

user ---> urls.py 

์•„์ง ํ™”๋ฉด์„ ๊ตฌ์„ฑํ•˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ url์— logout ์„ ์น˜๋ฉด ๋กœ๊ทธ์•„์›ƒ ๋˜๋Š” ์ฝ”๋“œ๋ฅผ ์จ์ค€๋‹ค. 

urlpatterns = [
	...
    path('logout/', views.logout),
]

์ด์ œ .../user/logout ์ด๋ผ๊ณ  ์น˜๋ฉด ๋กœ๊ทธ์•„์›ƒ์ด ๋˜๊ณ  ํ™ˆํ™”๋ฉด์œผ๋กœ ๋Œ์•„๊ฐ€๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค. 

 

 

๊ฒฐ๊ณผ

 

 

๋กœ๊ทธ์ธ์ด ๋œ ์ฑ„๋กœ logout ์ฃผ์†Œ๋ฅผ ์ณค๋”๋‹ˆ ์„ฑ๊ณตํ–ˆ๋‹ค! 

 

+ Recent posts