📌 passwordform.html
<!DOCTYPE html>
<html><head><meta charset="UTF-8">
<title>비밀번호수정</title>
{% load static %}
<link rel="stylesheet" href="{% static 'css/main.css' %}">
<link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css">
<script type="text/javascript">
function inchk(f) {
if(f.chgpass.value != f.chgpass2.value) {
alert("변경 비밀번호 와 변경 비밀번호 재입력이 다릅니다.");
f.chgpass2.value="";
f.chgpass2.focus();
return false;
}
return true;
}
</script></head>
<body>
<form action="../password/" method="post" name="f" onsubmit="return inchk(this)">
{% csrf_token %}
<table><caption>비밀번호 변경</caption>
<tr><th>현재 비밀번호</th><td><input type="password" name="pass"></td></tr>
<tr><th>변경 비밀번호</th><td><input type="password" name="chgpass"></td></tr>
<tr><th>변경 비밀번호 재입력</th>
<td><input type="password" name="chgpass2"></td></tr>
<tr><td colspan="2"><input type="submit" value="비밀번호 변경"></td></tr>
</table></form></body></html>
📌 passoword.html
<script>
alert("{{msg}}");
{% if closer %}
opener.location.href="{{url}}";
self.close();
{% else %}
location.href="{{url}}";
{% endif %}
</script>
📌 urls.py 내용 추가
# -*- coding: utf-8 -*-
"""
Created on Wed Dec 21 10:19:40 2022
@author: KITCOOP
member/urls.py
"""
from django.urls import path
from . import views
# <http://127.0.0.1:8000/member/>
urlpatterns=[
#<http://127.0.0.1:8000/member/login/> 요청시 view.py
# 의 login 함수 실행
path("login/",views.login, name="login"),
#<http://127.0.0.1:8000/member/join/>
path('join/', views.join,name='join'),
path('main/', views.main, name='main'),
path('logout/', views.logout, name='logout'),
path('info/<str:id>/', views.info,name='info'),
path('update/<str:id>/', views.update,name='update'),
path('delete/<str:id>/', views.delete,name='delete'),
path('list/', views.list, name='list'),
path('picture/', views.picture, name='picture'),
**path('password/<str:id>/',views.password, name='password')**
]
📌 update.html 수정
{% extends "base1.html" %}
{% block content %}
<script type="text/javascript">
function inputcheck(f) {
if(f.pass.value == "") {
alert("비밀번호를 입력하세요");
f.pass.focus();
return false;
}
}
function win_passchg() {
var op = "width=500, height=250, left=50,top=150";
open("../../password/","",op);
}
**function win_upload(){
var op = "width=500,height=150,left=50, top=150";
open("../../picture/","",op);**
}
</script>
<form action="../../update/{{mem.id}}/" name="f" method="post" onsubmit="return inputcheck(this)">
{% csrf_token %}
<input type="hidden" name="picture" value="{{mem.picture}}">
<table><caption>회원 정보 수정</caption>
<tr><td rowspan="4" valign="bottom">
<img src="/file/picture/{{mem.picture}}" width="100" height="120" id="pic"><br>
<font size="1"><a href="javascript:win_upload()">사진수정</a></font>
</td><th>아이디</th>
<td><input type="text" name="id" readonly value="{{mem.id}}"></td></tr>
<tr><th>비밀번호</th><td><input type="password" name="pass" ></td></tr>
<tr><th>이름</th>
<td><input type="text" name="name" value="{{mem.name}}"></td></tr>
<tr><th>성별</th><td><input type="radio" name="gender" value="1"
{% if mem.gender == 1 %}
checked
{% endif %}>남
<input type="radio" name="gender" value="2"
{% if mem.gender == 2 %}
checked
{% endif %}>여</td></tr>
<tr><th>전화번호</th>
<td colspan="2"><input type="text" name="tel" value="{{mem.tel}}"></td></tr>
<tr><th>이메일</th><td colspan="2"><input type="text" name="email"
value="{{mem.email}}"></td></tr>
<tr><td colspan="3"><input type="submit" value="회원수정">
<input type="button" value="비밀번호수정" onclick="win_passchg()">
</td></tr></table></form>
{% endblock content %}
📌 views.py 내용 추가
from django.shortcuts import render
from .models import Member
from django.http import HttpResponseRedirect
from django.contrib import auth
import time
# member/views.py
#<http://127.0.0.1:8000/member/login/> 요청시 호출되는 함수
def login(request) :
print("1:",request.session.session_key)
if request.method != "POST" :
return render(request,"member/login.html")
else :
id1=request.POST["id"]
pass1=request.POST["pass"]
try :
#입력된 id값으로 Member 객체에서 조회
member = Member.objects.get(id=id1) #select 문장 실행
except : #db에 아이디 정보가 없을 때
context = {"msg":"아이디를 확인하세요."}
return render(request,"member/login.html",context)
else : #정상적인 경우. 아이디 정보가 조회된 경우
#member.pass1 : db에 등록된 비밀번호
#pass1 : 입력된 비밀번호
if member.pass1 == pass1 : #로그인 정상
time.sleep(1)
print("2:",request.session.session_key)
request.session["login"] = id1 #session 객체에 login 등록.
return HttpResponseRedirect("../main")
else : #비밀번호 오류
context = {"msg":"비밀번호가 틀립니다.","url":"../login/"}
return render(request,"alert.html",context)
def join(request) :
if request.method != "POST" :
return render(request,"member/join.html")
else : #POST 방식.
#request.POST["id"] : id 파라미터 값.
member = Member(id=request.POST["id"],\\
pass1=request.POST["pass"],\\
name=request.POST["name"],
gender=request.POST["gender"],
tel=request.POST["tel"],
email=request.POST["email"],
picture=request.POST["picture"])
member.save() #insert 문장 실행.
return HttpResponseRedirect("../login/")
def main(request):
print("3",request.session.session_key)
return render(request, 'member/main.html')
def logout(request) :
print(request.session.session_key)
auth.logout(request) #세션종료
return HttpResponseRedirect("../login/")
# urls.py : info/<std:id>/ => info요청 url에서 id 값을 id
# 매개변수로 전달
def info(request,id) :
try :
login = request.session["login"]
except : #로그아웃상태
context = {"msg":"로그인하세요","url":"../../login"}
return render(request,"alert.html",context)
else : #로그인 상태
if login == id or login == 'admin' :
member = Member.objects.get(id=id)
return render(request,"member/info.html",{"mem":member})
else :
context = {"msg":"본인만 가능합니다.","url":"../../main"}
return render(request,"alert.html",context)
def update(request,id) :
try :
login = request.session["login"]
except : #로그아웃상태
context = {"msg":"로그인하세요","url":"../../login"}
return render(request,"alert.html",context)
else : #로그인 상태
if login == id or login == 'admin' :
return update_rtn(request,id)
else :
context = {"msg":"본인만 가능합니다.","url":"../../main"}
return render(request,"alert.html",context)
def update_rtn(request,id) :
member = Member.objects.get(id=id)
if request.method != "POST" :
return render(request,"member/update.html",{"mem":member})
else :
#비밀번호 검증.
#비밀번호 오류시 비밀번호 오류 메세지, update.html 페이지 출력
#member.pass1 : db에 등록된 비밀번호
# request.POST["pass"] : 입력된 비밀번호
if request.POST["pass"] == member.pass1: #입력pw와 dbpw가 같다면
member = Member(id=request.POST["id"],\\
pass1=request.POST["pass"],\\
name=request.POST["name"],
gender=request.POST["gender"],
tel=request.POST["tel"],
email=request.POST["email"],
picture=request.POST["picture"])
#id값존재:update, id값없으면 insert
member.save() #update 문장 실행.
#member.delete() #db에서 삭제
return HttpResponseRedirect("../../info/"+id+"/")
else : #같지않다면 오류메세지와 업데이트페이지 출력
context = {"msg":"비밀번호 오류입니다.",\\
"url":"../../update/"+id+"/"}
return render(request,"alert.html",context)
def delete(request,id) :
try :
login = request.session["login"]
except :
context = {"msg":"로그인하세요","url":"../../login"}
return render(request,"alert.html",context)
else :
if login == id or login == 'admin' :
return delete_rtn(request,id)
else :
context = {"msg":"본인만 가능합니다.",\\
"url":"../../main"}
return render(request,"alert.html",context)
def delete_rtn(request,id) :
if request.method != "POST" :
return render(request,"member/delete.html",{"id":id})
else :
login = request.session["login"]
member = Member.objects.get(id=login)
if member.pass1 == request.POST["pass"] : #비밀번호 일치
mem = Member.objects.get(id=id)
mem.delete()
if id == login : #본인탈퇴
auth.logout(request) #로그아웃
context={"msg":"탈퇴완료","url":"../../login/"}
return render(request,"alert.html",context)
else : #관리자 강제탈퇴
return HttpResponseRedirect("../../list/")
else : #비밀번호 불일치
context={"msg":"비밀번호 오류",\\
"url":"../../delete/"+id+"/"}
return render(request,"alert.html",context)
def list(request) :
try :
login = request.session["login"]
except :
context={"msg":"로그인 하세요","url":"../login/"}
return render(request,"alert.html",context)
else :
if login != "admin" : #request가 else대신.else없지만 request만나면 종료
context={"msg":"관리자만 가능합니다","url":"../main/"}
return render(request,"alert.html",context)
#mlist 요소: Member 객체
mlist = Member.objects.all() #모든데이터 리턴
return render(request,"member/list.html",{"mlist":mlist})
def picture(request) :
if request.method != 'POST':
return render(request, 'member/pictureform.html')
else :
#request.FILES["picture"] : 업로드된 파일 객체
#fname : 파일이름
fname = request.FILES["picture"].name
handle_upload(request.FILES["picture"])
return render(request,"member/picture.html",{"fname":fname})
'''
BASE_DIR/file/picture 폴더 생성 : 이미지 업로드 폴더
'''
def handle_upload(f) : # f : 업로드 된 파일(이미지)의 내용
with open("file/picture/"+f.name,"wb") as dest : #close 생략 가능
#f.chunks() : 이진파일 읽기.
for ch in f.chunks() :
dest.write(ch)
**def password(request) :
try : # 로그인 정보 가지고 오기
login = request.session["login"]
except :
context = {"msg":"로그인 하세요.","url":"../login/"}
return render(request,"alert.html",context)
if request.method != "POST" :
return render\\
(request,"member/passwordform.html")
else :
member = Member.objects.get(id=login)
if member.pass1 == request.POST["pass"] : # 비밀번호 비교
member.pass1 = request.POST["chgpass"] # 변경할 비밀번호로 비밀번호값 수정
member.save() # 해당로그인된 정보를 수정
context = {"msg":"비밀번호 수정 완료",\\
"url":"../info/"+login+"/","closer": True}
return render(request,"member/password.html",context)
else : # 비밀번호 오류
context = {"msg":"비밀번호 오류",\\
"url":"../password/"+login+"/","closer": False}
return render(request,"member/password.html",context)**
- 결과
'수업(국비지원) > Django' 카테고리의 다른 글
[Django] 게시판 등록 (0) | 2023.04.27 |
---|---|
[Django] 게시판 생성 (0) | 2023.04.27 |
[Django] 파일 업로드 (0) | 2023.04.27 |
[Django] 회원탈퇴 (0) | 2023.04.27 |
[Django] 회원가입, 로그아웃, 업데이트 (0) | 2023.04.27 |