Django 구성 요소 의 쿠키 와 session 사용 방법
http 프로 토 콜 은 무상 태 입 니 다.요청 과 응답 에 대한 정 보 를 기록 하지 않 습 니 다.예 를 들 어 서버 의 웹 페이지 를 방문 할 때 먼저 로그 인 한 다음 웹 페이지 에 들 어가 라 고 합 니 다.그러나 이 서버 의 다른 웹 페이지 에 들 어 가 려 고 할 때 방금 로그 인 했 고 로그 인 하 라 고 하 는 것 을 알 지 못 합 니 다.바로 bug 입 니 다.하지만 인터넷 에 접속 할 때마다 로그 인 만 하면 된다 고 했 습 니 다.제 가 매번 로그 인 하 라 고 한 것 은 아 닙 니 다.이것 은 세 션 경로 기술 이 로그 인 정 보 를 기록 해 준 것 입 니 다.지금 우 리 는 Django 의 세 션 경로 기술 인 쿠키 와 session 을 이야기 하고 세 션 추적 을 실시 합 니 다.
쿠키
쿠키 는 key-value 구조 로 사전 과 유사 합 니 다.서버 의 응답 에 따라 클 라 이언 트 브 라 우 저 에 보 내 고 클 라 이언 트 브 라 우 저 는 쿠키 를 저장 합 니 다.현재 서버 에 다시 접근 할 때 쿠키 를 서버 에 다시 보 냅 니 다.
문법:
response.set_cookie() # cookie
request.COOKIES # cookie
쿠키 기반 로그 인 페이지 와 홈 페이지
def login(request): #
if request.method=="GET":
return render(request,"login.html")
else:
user = request.POST.get("user")
pwd = request.POST.get("pwd")
user_obj=UserInfo.objects.filter(name=user,pwd=pwd).first()
if user_obj: , cookie , , cookie
# obj=HttpResponse(" !")
obj=redirect("/index/")
obj.set_cookie("is_login",True,20)
obj.set_cookie("username",user)
return obj
return HttpResponse("Error!")
def index(request): #
print("request.COOKIES",request.COOKIES)
is_login=request.COOKIES.get("is_login") # cookie ,
username=request.COOKIES.get("username")
if not is_login: # , , ,
return redirect("/login/")
return render(request,"index.html",{"username":username})
세 션위의 쿠키 는 브 라 우 저 에서 저 장 됩 니 다.현재 session 은 쿠키 를 기반 으로 하지만 서버 에 저 장 된 기술 입 니 다.서버 가 실 행 될 때 방문 하 는 브 라 우 저 마다 session 을 설정 한 다음 Django 아래 에 저 장 된 Djangosession 표 에 있 습 니 다.
문법:
request.session["k1"]="v1" session
request.session.get("k1") session
request.session.flush() session
session 기반 로그 인 페이지 와 홈 페이지 접근
def login(request):
if request.method=="GET":
return render(request,"login.html")
else:
user = request.POST.get("user")
pwd = request.POST.get("pwd")
user_obj=UserInfo.objects.filter(name=user,pwd=pwd).first()
if user_obj:
request.session["is_login"]=True
request.session["username"]=user
return redirect("/index/")
return HttpResponse("Error!")def index(request):
is_login=request.session.get("is_login")
username=request.session.get("username")if not is_login:
return redirect("/login/")
return render(request,"index.html",{"username":username})
4.이미지 인증 코드 의 실현HTML 파일:로그 인 페이지
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" href="/static/css/bootstrap.css" rel="external nofollow" >
<script src="/static/jquery-3.3.1.js"></script>
<script src="/static/js/bootstrap.js"></script>
</head>
<body>
{% csrf_token %}
<div class="container">
<div class="row">
<div class="col-md-5">
<div style="color: blue;font-size: 20px"> </div>
<div class="form-group">
<input type="text" name="user" class="form-control">
</div>
<div class="form-group">
<input type="password" name="pwd" class="form-control">
</div>
<div class="row form-group">
<div class="col-md-6"> <input type="text" name="yan" class="form-control"></div>
<div class="col-md-6" style="line-height:60px"><img src="/img_drow/" alt="" width="200" height="40"></div>
</div>
<button class="login"> </button>
<p style="color: red;font-size: 30px"></p>
</div>
</div>
</div>
<script>
$('.login').click(function () {
var name = $('[name="user"]').val();
var pw = $('[name="pwd"]').val();
var yan = $('[name="yan"]').val();
$.ajax({
url: '/login/',
type: 'post',
data: {csrfmiddlewaretoken: $('[name="csrfmiddlewaretoken"]').val(), user: name, pwd: pw, yan: yan},
success: function (data) {
if (data == '200') {
location.href = '/books/'
}
else if (data == '100') {
$('p').html(' ')
}
else {
$('p').html(' ');
var num=Math.random();
$('img').attr('src', '/img_drow?'+num)
}
}
})
});
$('img').click(function () {
var num=Math.random();
$(this).attr('src', '/img_drow?'+num)
})
</script>
</body>
</html>
views:
import random
from PIL import Image,ImageDraw,ImageFont
from io import BytesIO
def get_random_color():
return random.randint(0,255),random.randint(0,255),random.randint(0,255)
def img_drow(request):
img=Image.new('RGB',(200,40),get_random_color())
draw=ImageDraw.Draw(img)
font=ImageFont.truetype('static/fonts/kumo.ttf',34)
keep_str=''
for i in range(5):
num=str(random.randint(0,9))
lower=chr(random.randint(65,90))
upper=chr(random.randint(97,122))
random_char=random.choice([num,lower,upper])
draw.text((i*30+50,0),random_char,get_random_color(),font=font)
keep_str+=random_char
width = 200
height=40
for i in range(10):
x1=random.randint(0,width)
x2=random.randint(0,width)
y1=random.randint(0,height)
y2=random.randint(0,height)
draw.line((x1,y1,x2,y2),fill=get_random_color())
for i in range(10):
draw.point([random.randint(0, width), random.randint(0, height)], fill=get_random_color())
x = random.randint(0, width)
y = random.randint(0, height)
draw.arc((x, y, x + 4, y + 4), 0, 90, fill=get_random_color())
request.session['keep_str']=keep_str
f=BytesIO()
img.save(f,'png')
data=f.getvalue()
return HttpResponse(data)
def login(request):
if request.method=='GET':
return render(request,'login.html')
else:
yan=request.POST.get('yan')
if yan.upper()==request.session.get('keep_str').upper():
user=request.POST.get('user')
pwd=request.POST.get('pwd')
obj=UserInfo.objects.filter(name=user,pwd=pwd).first()
if obj :
request.session['state']=True
request.session['user']=user
return HttpResponse('200')
else:
return HttpResponse('100')
else:
return HttpResponse('300')
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Django 라우팅 계층 URLconf 작용 및 원리 해석URL 구성(URLconf)은 Django가 지원하는 웹 사이트의 디렉토리와 같습니다.그것의 본질은 URL과 이 URL을 호출할 보기 함수 사이의 맵표입니다. 위의 예제에서는 URL의 값을 캡처하고 위치 매개 변수로...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.