任务描述:实现登录和退出

1.项目结构

2.源代码

urls.py

from django.conf.urls import url
from django.contrib import admin
from user import views admin.autodiscover() urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'index/', views.index),
url(r'user/regist/', views.regist),
url(r'user/login/', views.login),
url(r'user/logout/', views.logout),
]

views.py

from django.shortcuts import render
from django import forms
from django.http import HttpResponseRedirect, HttpResponse
import sqlite3
from . import models class UserForm(forms.Form):
username = forms.CharField(max_length=100)
password = forms.CharField(widget=forms.PasswordInput)
headimg = forms.FileField() class LoginForm(forms.Form):
username = forms.CharField(max_length=100)
password = forms.CharField(widget=forms.PasswordInput) def insert(user):
# 连接数据保存
models.User.objects.create(username=user.username, password=user.password, headimg=user.headimg)
return True def find_user(user):
users = models.User.objects.filter(username=user.username, password=user.password)
if users:
return True
else:
return False def regist(request):
context = {}
if request.method == 'POST':
uf = UserForm(request.POST, request.FILES)
if uf.is_valid():
username = uf.cleaned_data['username']
password = uf.cleaned_data['password']
headimg = uf.cleaned_data['headimg']
user = models.User(username=username, headimg=headimg.name, password=password)
# save headimg
fp = open('upload/' + headimg.name, 'wb')
s = headimg.read()
fp.write(s)
fp.close()
if insert(user):
return HttpResponseRedirect('/user/login') # 重定向到登录界面
else:
uf = UserForm()
context = {'uf': uf}
return render(request, 'user/regist.html', context) def login(request):
context = {}
if request.method == 'POST':
uf = LoginForm(request.POST)
if uf.is_valid():
username = uf.cleaned_data['username']
password = uf.cleaned_data['password']
user = models.User(username=username, password=password)
if find_user(user):
print('find it!')
# session
request.session['username'] = username
response = HttpResponseRedirect('/index/')
# cookie
# response.set_cookie('username', username, 3600) # 将username写入浏览器cookie,失效时间为3600
response.set_cookie('password', password, 3600) # 将password写入浏览器cookie,失效时间为3600
return response
else:
return render(request,'/user/login/',context)
else:
uf = LoginForm()
print('not find it!')
context = {'uf': uf}
return render(request, 'user/login.html', context) def logout(request):
response = HttpResponseRedirect('/user/login/')
try:
del request.session['username']
except Exception as e:
print(e)
# response.delete_cookie('username')
response.delete_cookie('password') # 删除cookie
return response def index(request):
context = {}
# session
username = request.session.get('username', 'anybody')
context['username'] = username
# cookie
if request.COOKIES:
print(request.COOKIES)
return render(request, 'index.html', context)

index,html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>index</title>
</head>
<body>
<h2>This is index page!</h2>
<p>welcome,{{username}} !</p>
<a href="/user/logout/">Logout</a>
</body>
</html>

login.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>login</title>
</head>
<body>
<form method="post" action="/user/login/">
{% csrf_token %}
{{uf.as_p}}
<input type="submit" value="submit">
</form>
</body>
</html>

regist.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>regist</title>
</head>
<body>
<h3>regist</h3>
<hr>
<form method="post" enctype="multipart/form-data">
{% csrf_token %}
{{uf.as_p}}
<input type="submit" value="submit">
</form>
</body>
</html>

models.py

from django.db import models

class User(models.Model):
username = models.CharField(max_length=100)
password = models.CharField(max_length=20, default='123456')
headimg = models.FileField() def __str__(self):
return self.username + ',' + self.password + ',' + self.headimg.name

3.运行测试

未登录访问:

登录后访问:

退出

Django会话cookie&session的更多相关文章

  1. day09 Django: 组件cookie session

    day09 Django: 组件cookie session   一.cookie和session都是会话跟踪技术     1.什么是会话             可以理解为客户端和服务端之间的一次会 ...

  2. django - 总结 - cookie|session

    Cookie是通过HTTP请求和响应头在客户端和服务器端传递的. 在Web开发中,使用session来完成会话跟踪,session底层依赖Cookie技术. --------------------- ...

  3. python框架之Django(7)-Cookie&Session使用

    Cookie 添加 response.set_cookie 添加明文cookie response.set_cookie(key, value='', max_age=None, expires=No ...

  4. python 全栈开发,Day76(Django组件-cookie,session)

    昨日内容回顾 1 json 轻量级的数据交换格式 在python 序列化方法:json.dumps() 反序列化方法:json.loads() 在JS中: 序列化方法:JSON.stringfy() ...

  5. Django中cookie&session的实现

    1.什么叫Cookie Cookie翻译成中文是小甜点,小饼干的意思.在HTTP中它表示服务器送给客户端浏览器的小甜点.其实Cookie是key-value结构,类似于一个python中的字典.随着服 ...

  6. Django之cookie+session

    前言 HTTP协议 是短连接.且状态的,所以在客户端向服务端发起请求后,服务端在响应头 加入cokie响应给浏览器,以此记录客户端状态: cook是来自服务端,保存在浏览器的键值对,主要应用于用户登录 ...

  7. Django之cookie&session

    cookie Cookie 是在 HTTP 协议下,服务器或脚本可以维护客户工作站上信息的一种方式.Cookie 是由 Web 服务器保存在用户浏览器(客户端)上的小文本文件,它可以包含有关用户的信息 ...

  8. django框架--cookie/session

    目录 一.http协议无状态问题 二.会话跟踪技术--cookie 1.对cookie的理解 2.cookie的使用接口 3.cookie的属性 4.使用cookie的问题 三.会话跟踪技术--ses ...

  9. Django组件-cookie,session

    昨日内容回顾: json 轻量级的数据交换格式 在python 序列化方法:json.dumps() 反序列化方法:json.loads() 在JS中: 序列化方法:JSON.stringfy() 反 ...

随机推荐

  1. 事件循环(Event Loop)

    1.什么是事件循环? JavaScript为单线程执行的,所以是从上到下依次执行,js分为两个任务,宏任务和微任务 首先执行宏任务(第一次就是执行所有的同步代码),再执行所有的微任务,执行完毕之后再次 ...

  2. 题目1205:N阶楼梯上楼问题(2008年华中科技大学计算机保研机试真题:递推求解)

    题目1205:N阶楼梯上楼问题 时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:2447 解决:927 题目描写叙述: N阶楼梯上楼问题:一次能够走两阶或一阶,问有多少种上楼方式. (要求 ...

  3. UVA 11557 - Code Theft (KMP + HASH)

    UVA 11557 - Code Theft 题目链接 题意:给定一些代码文本.然后在给定一个现有文本,找出这个现有文本和前面代码文本,反复连续行最多的这些文本 思路:把每一行hash成一个值.然后对 ...

  4. vue 键盘回车事件导致页面刷新的问题,路由多了一个问号

    问题: <el-form @submit.native.prevent> <el-form-item > <el-input @keyup.enter.native=&q ...

  5. ThinkPHP5.0---删除数据

    删除特定记录 public function delete() { // 获取要删除的对象:关键字为16 $Teacher = Teacher::); // 删除对象 $Teacher->del ...

  6. 解决Keystore was tampered with, or password was incorrect

    使用签名文件keystore查看生成的数字签名中报错解决 Keystore was tampered with, or password was incorrect 这是由于android规定自己定义 ...

  7. 16.用Spring Boot颠覆Java应用开发

    转自:https://www.cnblogs.com/aishangJava/p/5971288.html Java开发概述: 使用Java做Web应用开发已经有近20年的历史了,从最初的Servle ...

  8. Centos NFS 简单设置

    Server 端: NFS的安装配置:centos 5 :yum install nfs-utils portmapcentos 6 :yum install nfs-utils rpcbind vi ...

  9. PythonNET网络编程1

    # PythonNET 网络编程 ISO(国际标准化组织) 制定了 OSI(Open System Interconnectio),意为开放式系统互联.国际标准化组织(ISO)制定了OSI模型,该模型 ...

  10. Day1:If else流程判断

    一.if...else语句 if 条件成立: 执行条件成立后的代码 else: 执行条件不成立的代码 注:注意有冒号,python会强制缩进!一般语句都必须顶格写,缩进是缩进一个tab键,等于4个空格 ...