Notice
Recent Posts
Recent Comments
Link
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
Tags
more
Archives
Today
Total
관리 메뉴

MyPrograming

인스타그램 클론코딩 (회원가입) 본문

Python/python 클론코딩

인스타그램 클론코딩 (회원가입)

SeongWon 2020. 2. 17. 19:53
반응형

Instagram - signup.html

<form class="mt-3" method="post">{% csrf_token %}
    <div class="form-group">
      <input type="email" class="form-control" id="e_mail" name="e_mail" placeholder="이메일 주소">
    </div>
    <div class="form-group">
      <input type="text" class="form-control" id="name" name="name" placeholder="성명"> 
    </div>
    <div class="form-group">
      <input type="text" class="form-control" id="user_id" name="user_id" placeholder="사용자 ID">
    </div>
    <div class="form-group">
      <input type="password" class="form-control" id="user_pw" name="user_pw" placeholder="비밀번호">
    </div>
    <button type="submit" class="btn btn-primary" onclick="">가입하기</button>
</form>

 

Instagram - RegisterView.py

def RegisterView(request):
    if request.method == "GET":
        return render(request, 'signup.html')

    elif request.method == "POST":
        email = request.POST.get("e_mail")
        name = request.POST.get("name")
        user_id = request.POST.get("user_id")
        user_pw = request.POST.get("user_pw")
        salt, hashed_pw = hashing_password(user_pw)

        cursor = connection.cursor()

        strSql = "SELECT instagram.user.user_id"
        strSql += " FROM instagram.user"
        strSql += " WHERE user_id = (%s)"

        result = cursor.execute(strSql, (user_id,))
        datas = cursor.fetchall()

        connection.commit()
        connection.close()

        if len(datas) > 0:
            connection.rollback()
            print("이미 존재하는 아이디입니다.")

            messages.error(request, '이미 존재하는 아이디입니다.')

            return redirect('/register')

        elif len(datas)==0:
            cursor = connection.cursor()

            insert_sql = "INSERT INTO instagram.user(e_mail, name, user_id, user_pw, salt)"
            insert_sql += " VALUES ((%s), (%s), (%s), (%s), (%s))"

            insert_result = cursor.execute(insert_sql, (email, name, user_id, hashed_pw, salt,))
            insert_datas = cursor.fetchall()

            connection.commit()
            connection.close()

            messages.success(request, '회원가입에 성공하셨습니다.')

            return redirect('/login')

RegisterView에 대한 두가지 request 처리

  • request.method == 'GET' : request 메소드가 get일 경우 회원가입 페이지를 rendering
  • request.method == 'POST' : requrest 메소드가 post일 경우 위의 html form에서 post된 데이터를 name으로 넘겨받아 처리
  • messages.success(request, '.... '): 사용자에게 정보를 전달하기 위해 사용하는 1회성의 메세지

 


 

Messages Framework

:쿠키 및 세션 기반의 1회성 메시지를 담는 용도

  • 메시지를 하나의 HttpRequest 인스턴스에 임시로 저장하고 바로 다음 request에 표시됨
  • 1회 노출되고 해당 페이지를 reload하면 사라짐
from django.contrib import messages

 

메시지에는 레벨이 존재합니다. 메시지 레벨을 사용하면 메시지를 유형별로 그룹화하여 뷰나 템플릿에서 다르게

필터링하거나 표시 할 수 있습니다. Django messages의 레벨은 다음과 같습니다.

  • DEBUG: 개발 관련 메시지(default로 메시지를 남겨도 무시됨)
  • INFO: 사용자를위한 정보 메시지
  • SUCCESS
  • WARNING
  • ERROR

html에서 사용법

{% if messages %}
    <div>
        {% for message in messages %}
            {{message.tags}}! {{message.message}}
        {% endfor %}
    </div>
{% endif %}

 

구축된 회원가입 페이지

 

회원가입 성공시의 메세지와 login 페이지로 redirect

반응형