Django笔记-登陆、注册(利用cookie实现)
1、项目结构:

2、关键代码:
settings.py
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'blog',
) MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
#'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'test10',
'HOST':'localhost',
'PORT':'',
'USER':'root',
'PASSWORD':'passwd',
}
}
urls.py
url(r'^register/$', 'blog.views.register'),
url(r'^login/$','blog.views.login'),
url(r'^index/$', 'blog.views.index'),
url(r'^logout/$','blog.views.logout'),
models.py
# -*- coding: utf-8 -*-
from django.db import models class User(models.Model):
username = models.CharField(max_length=20)
password = models.CharField(max_length=30) def __unicode__(self):
return self.username
views.py
# -*- coding: utf-8 -*-
from django.shortcuts import render, render_to_response
from django.http import HttpResponse
from django import forms
from models import User
from django.http.response import HttpResponseRedirect class UserForm(forms.Form):
username = forms.CharField()
password = forms.CharField(widget=forms.PasswordInput) def register(req):
#处理post方法的数据
if req.method == "POST":
uf = UserForm(req.POST)
#如果数据有效
if uf.is_valid():
username = uf.cleaned_data['username']
password = uf.cleaned_data['password']
#username = unicode(uf.cleaned_data['username'],'UTF-8')
#password = unicode(uf.cleaned_data['password'],'UTF-8')
#print username,password
#return HttpResponse('ok')
User.objects.create(username=username,password=password)
return HttpResponseRedirect('/login/')
else:
uf = UserForm()
return render_to_response('register.html',{'uf':uf})
#处理get方法的数据
else :
uf = UserForm(req.GET)
if uf.is_valid():
username = uf.cleaned_data['username']
password = uf.cleaned_data['password']
#username = unicode(uf.cleaned_data['username'],'UTF-8')
#password = unicode(uf.cleaned_data['password'],'UTF-8')
#print username,password
#return HttpResponse('ok')
User.objects.create(username=username,password=password)
return HttpResponseRedirect('/login/')
else:
uf = UserForm()
return render_to_response('register.html',{'uf':uf}) def login(req):
if req.method == "POST":
uf = UserForm(req.POST)
if uf.is_valid():
username = uf.cleaned_data['username']
password = uf.cleaned_data['password']
#获取名字和密码
users = User.objects.filter(username__exact=username,password__exact=password)
if users:
#获取到response
response = HttpResponseRedirect('/index/')
#保存到cookie
response.set_cookie('username', username, 3600)
return response else:
return HttpResponseRedirect('/login/')
#return HttpResponseRedirect('/login/')
else:
uf = UserForm()
return render_to_response('login.html',{'uf':uf})
else :
uf = UserForm(req.GET)
if uf.is_valid():
username = uf.cleaned_data['username']
password = uf.cleaned_data['password']
users = User.objects.filter(username__exact=username,password__exact=password)
if users:
#return HttpResponseRedirect('/index/')
response = HttpResponseRedirect('/index/')
#response.set_signed_cookie('username', username, 3600)
response.set_cookie('username',username,3600)
else:
return HttpResponseRedirect('/login/')
#return HttpResponseRedirect('/login/')
else:
uf = UserForm()
return render_to_response('login.html',{'uf':uf}) def index(req):
#return HttpResponse('ok')
username = req.COOKIES.get('username','')
#return HttpResponse('welcome %s'% username)
return render_to_response('index.html',{'username':username}) def logout(req):
# 删除cookie
response = HttpResponse('logout')
response.delete_cookie('username')
return response
register.html
<body>
<form method="post">
{{uf.as_p}}
<input type="submit" value="OK"/>
</form>
</body>
login.html
<body>
<form method="post">
{{uf.as_p}}
<input type="submit" value="OK"/>
</form>
</body>
index.html
<body>
<div>
<h1>welcome , {{username}}</h1>
<a href='/logout/'>logou</a>
</div>
</body>
3、效果截图:
注册:

登陆:

登陆成功:

注销:

再次输入index主体页面,已经删除了cookie,效果如下:

在数据库中插入的数据(推荐使用SQLyog,这个真心不错):

Django笔记-登陆、注册(利用cookie实现)的更多相关文章
- Django笔记-登陆注册-1
1.项目结构(eclipse+PyDev工具)(粘上来后代码缩进格式没有了,就先不整了) 2.关键代码: test_log03.settings.py INSTALLED_APPS = ( 'djan ...
- 2.django笔记之缓存,session,cookie,ajax
一.django缓存 1.缓存 缓存的意义在于把昂贵的计算结果保存起来一遍下次的访问,有缓存的站点的流程大概是这样子的: 给定一个url,检查页面是否在缓存中 如果在,返回缓存的页面 否则,生成该页面 ...
- django 用户登陆注册
注册登陆 views.py #!/usr/bin/env python # -*- coding:utf- -*- from django.shortcuts import render,render ...
- Django学习笔记(5)——cookie和session
一,前言 1.1,什么是会话跟踪技术 在JavaWeb中,客户向某一服务器发出第一个请求开始,会话就开始了,直到客户关闭了浏览器会话结束.在一个会话的多个请求中共享数据,这就是会话跟踪技术. 例如在一 ...
- RFS实例登录126邮箱/利用cookie登陆百度
可以直接添加用户关键字,也可以新建资源,将用户关键字添加入资源,然后导入整个资源文件 用户关键字内部实现如下: 打开126邮箱首页: Open Browser Http://mail.126.com ...
- 使用ApiPost测试接口时需要先登录怎么办?利用Cookie模拟登陆!
ApiPost简介: ApiPost是一个支持团队协作,并可直接生成文档的API调试.管理工具.它支持模拟POST.GET.PUT等常见请求,是后台接口开发者或前端.接口测试人员不可多得的工具 . 下 ...
- Python自动化运维 - Django(三)CSRF - Cookie&Session
CSRF跨站请求伪造 CSRF跨站点请求伪造(Cross—Site Request Forgery),跟XSS攻击一样,存在巨大的危害性,你可以这样来理解:攻击者盗用了你的身份,以你的名义发送恶意请求 ...
- Django详解之四、cookie和session
一.使用背景 思路 简单的后台管理:对人员的管理 1. 登录注册 2. 老师 班级管理 学院管理 3. 增删改查 开发: 1. 定义数据库表结构 a) 表结构关系 i. class classes(m ...
- Servlet 利用Cookie实现一周内不重复登录
import java.io.IOException;import java.io.PrintWriter; import javax.servlet.ServletException;import ...
随机推荐
- 【BZOJ 3083】遥远的国度
这道题很简单的连剖+分类讨论,但是SDOI Round2要来了,不会手动栈怎么办呢?只好用一下这道题练习一下手动栈了,结果调了一天多QwQ 链剖的第一个dfs用bfs水过就行,但是我自以为是地把倍增写 ...
- 基于Oracle的Mybatis 批量插入
项目中会遇到这样的情况,一次性要插入多条数据到数据库中,有两种插入方法: 方法一: Mybatis本身只支持逐条插入,比较笨的方法,就是遍历一个List,循环中逐条插入,比如下面这段代码 for(Da ...
- 76.Android之EventBus源码解析
转载:http://p.codekk.com/blogs/detail/54cfab086c4761e5001b2538 1. 功能介绍 1.1 EventBus EventBus 是一个 Andro ...
- 68.Android之透明状态栏
转载:http://www.jianshu.com/p/2f17d0e7f6b0 Android开发中需要透明状态栏,注意:本文只适配Android4.4以上及5.0以上设备 概述 有时候我们想在 a ...
- Jenkins使用jenkins-cli.jar进行远程调用时出现“ERROR: No such job 'test'”的问题解决(Windows)
网上最提倡的解决办法是用SSH的key进行登录,但是我发觉Linux上非常容易实现,但是Windows压根不知道在哪里设置. 原文:https://issues.jenkins-ci.org/brow ...
- C++11之thread线程
今天由于项目需求(其实是某门课的一个大作业,不好意思说出口啊...),想要使用多线程.相信大家一般用的是linux上的POSIX C或windows上的线程库,然而这些线程库以来于特定系统,并不“标准 ...
- [iOS 利用MapKit和CoreLocation框架打造精简的定位和导航]
运行效果: 一.利用<CoreLocation/CoreLocation.h>定位 创建变量 CLLocationManager *locationManager , ...
- sed命令给文本文件的每行的行首或者行尾添加文字
在每行的头添加字符,比如"HEAD",命令如下: sed 's/^/HEAD&/g' test.file 在每行的行尾添加字符,比如“TAIL”,命令如下: sed 's/ ...
- hihocoder 1356 分隔相同整数
时间限制:10000ms单点时限:1000ms内存限制:256MB 描述 给定一个包含N个整数的数组A.你的任务是将A重新排列,使得任意两个相等的整数在数组中都不相邻. 如果存在多个重排后的数组满足条 ...
- centos7安装mplayer 错误集锦
(1)在 linux下运行程序时,发现了error while loading shared libraries这种错误,一时间不知道解决办法,在网上搜索,终于解决了:./tests: error w ...