django form (something about cookie and sessionid)

今天来总结一下关于表单中涉及到的cookie和session

首先,什么是cookie呢?用我自己的理解来说,就是浏览器为了维持web的状态,将用户信息储存在本地的一个小文件里面,当浏览器再次访问的时候会首先查看你是否有着之前的用户信息,这样就可以维持上次的状态~但是只有cookie,也有安全隐患,再就是大量的cookies也会占用服务器的带宽,所以,session就横空出世,它与cookies有着密不可分的关系。在本地或者浏览器中的cookies会存有一组sessionid,当请求到服务器时,这个sessionid和当前的用户会形成一个映射表格,即不同的用户会有着不同的sessionid,而且这个sessionid唯一,这样访问的时候,如果id和用户匹配,就可以维持上次的登录状态,当然,cookies有它的维持时限,时限一过,cookies就会被删除~

好了,在这个知识的基础上,我们来用django框架做一下,关于cookies的表单。

这次主要实现一下几个小功能

1.如果用户没有登录而访问主页,直接跳转到登录页面

2.如果用户登录成功,跳转到主页

3.如果用户之前已经登录了,那么再次访问主页时不会跳转到登录页面,可以直接成功登陆

好了,先上代码~

 1 #urls.py
 2 from django.conf.urls import url
 3 from django.contrib import admin
 4 from blog import views
 5
 6 urlpatterns = [
 7     url(r‘^admin/‘, admin.site.urls),
 8     url(r‘^$‘,views.index,name=‘index_page‘),
 9     url(r‘login‘,views.login,name=‘login_page‘),
10 ]
11
12
13
14 #views.py
15 # -*- coding: utf-8 -*-
16 from __future__ import unicode_literals
17 import uuid
18 from django.shortcuts import render,reverse
19 from django.http import HttpResponse,HttpResponseRedirect
20 from django.db import models
21 from models import UserModel
22 # Create your views here.
23
24 ‘‘‘
25 1.如果用户要登录,跳转到登录页面
26 2.如果用户已登录,跳转到index
27 3.如果用户已经登录,访问index主页
28 ‘‘‘
29 def index(request):
30     mysessionid = request.COOKIES.get(‘mysessionid‘)
31     print ‘index:‘,mysessionid
32     username = request.session.get(mysessionid,None)
33     if username:
34         return HttpResponse("这是博客主页")
35     else:
36         return HttpResponseRedirect(‘login_page‘)
37
38 def login(request):
39     if request.method == ‘GET‘:
40         return render(request,‘login.html‘)
41     else:
42         username = request.POST.get(‘username‘)
43         password = request.POST.get(‘password‘)
44         userModel = UserModel.objects.filter(name=username,password=password).first()
45
46         if userModel:
47             #1.给客户端设置cookie
48             response = HttpResponseRedirect(reverse(‘index_page‘))
49             mysessionid = str(uuid.uuid4())
50             response.set_cookie(‘mysessionid‘,mysessionid)
51             #2。设置session 的值
52             request.session[mysessionid] = userModel.name
53             return response
54         else:
55             return HttpResponse("用户名或密码错误")
56
57 #models.py
58 from __future__ import unicode_literals
59
60 from django.db import models
61
62 # Create your models here.
63 class UserModel(models.Model):
64     name = models.CharField(max_length=100)
65     password = models.CharField(max_length=100)
66
67     def __unicode__(self):
68         return self.name

接下来是html代码:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>登录页面</title>
 6 </head>
 7 <body>
 8     <form action="" method="post">
 9         {% csrf_token %}
10         <input type="text" name="username" placeholder="请输入用户名"><br>
11         <input type="password" name="password" placeholder="请输入密码">
12         <input type="submit" value="点我提交">
13     </form>
14 </body>
15 </html>

结果如下图:

第一次输入127.0.1:8000  跳转到该页面

输入用户名和密码点击点我提交(之前已经在数据库中创建好)

3.新开一个页面,然后输入127.0.0.1就直接到了主页

有几个方面的问题要注意:

1.在request.session:返回一个QueryDict的类字典类型的集合,这个属性要有效,必须添加SessionMiddleware这个中间件。一般seetings.py里面都带有该中间件

2.程序的流程是,首先通过路由登录网址,然后由index函数来渲染,由于刚开始没有登录,所以直接跳转到登录页面。在登录页面中由login函数来渲染,首先是get方法,然后进入index.html的templates文件进行渲染。这个时候,输入用户名和密码,点击提交后,为post方法,也是在当前页面进行,也就是由login函数进行渲染。此时,通过request.POST.get方法拿到用户输入的用户名和密码,并与数据库中的进行比对,若存在,则向下进行,若不存在,则输出用户名或密码错误。

如果该用户存在,且密码正确。则在httpresponse函数中,给用户设置cookie_sessionid的值。然后接下来在服务器端建立一个mysessionid和userModel.name(数据库中的用户名)的字典(映射关系)。然后返回到主页127.0.0.1:8000中。由index函数进行渲染。此时的index函数中,会拿到cookies中的sessionid的值并看能否由这个sessionid得到用户名,若能得到,则不用再次登录,若得不到,则返回到登录页面。

时间: 2024-10-08 07:09:35

django form (something about cookie and sessionid)的相关文章

Django form组件 与 cookie/session

目录 一.form组件 二.cookie.session 一.form组件 1.1 以注册功能为例 注册功能 1.渲染前端标签获取用户输入 --> 渲染标签 2.获取用户输入传递到后端校验 --> 校验数据 3.校验未通过展示错误信息 --> 展示信息 ps:校验数据:前后端都可以校验,但是前端可以不做,后端必须得做!!! 1.2 校验数据 校验数据 第一步需要一个form类 from django import forms class MyForm(forms.Form): name

django之form组件、cookie、session

django之form组件.cookie.session django form组件 1.渲染标签 2.校验数据 3.展示信息 校验数据 # 第一步需要一个form类 from django import forms class MyForm(forms.Form): name = forms.CharField(max_length=8) password = forms.CharField(max_length=8,min_length=3) email = forms.EmailField

Web框架之Django_08 重要组件(form组件、cookie和session组件)

摘要: form组件 cookie组件 session组件 一.form组件 form介绍我们之前在html页面中利用form表单向后端提交数据时候,都需要对用户的输入进行校验,比如校验用户是否输入正确(长度.格式...),如果用户输入的内容有误则需要在相应的位置显示对应的错误信息来提醒用户,提高前端的交互效率.Django form组件就是实现上述功能的一个功能组件.from组件主要功能有:# 生成页面可用的html标签# 对用户条件的数据进行校验# 保留上次输入内容 先来看看自己手写注册功能

django框架中的cookie与session

cookie因为http是一个无状态协议,无法记录用户上一步的操作,所以需要状态保持.cookie和session的区别:1.cookie是保存在浏览器本地的,所以相对不安全.cookie是4k的大小,最多保存20条(因为最原始的浏览器的本地是很小的,只是一个历史数据,但是其实是不精确的),默认的过期时间是14天.2.session是保存在服务器的,是相对安全的,session依赖于cookie,sessionid保存在cookie中,理论上无大小限制.3.相同点:都是实现状改保持,都是有服务器

Django之Session与Cookie

目录 一.cookie Cookie与的session由来 什么是Cookie Cookie的原理 查看Cookie cookie与session的作用 二.Django中操作Cookie 获取Cookie 设置Cookie 删除Cookie 三.Session Session的由来 设置session 获取session 四.设置session与cookie的超时时间 删除当前的会话数据并删除会话的Cookie(推荐) 五.Django中Session相关方法 Session流程解析 Sess

Django基础学习之Cookie 和 Sessions 应用

在Django里面,使用Cookie和Session看起来好像是一样的,使用的方式都是request.COOKIES[XXX]和request.session[XXX],其中XXX是您想要取得的东西的key,但是这两者的原理和实现方式确是非常的不同. 首先介绍Cookie,只要是HTTP协议,就会有COOKIE这个东西; 只要您的浏览器没有禁用Cookie,就 可是使用它.而且是不分用什么语言,用什么框架,因为这是在HTTP协议的层面支持的,浏览器会把您设置的XXX的这个Cookie在Respo

Django Form表单

Django  Form 表单 在实际的生产环境中比如登录和验证的时候,我们一般都使用Jquery+ajax来判断用户的输入是否为空,假如JS被禁用的话,咱们这个认证屏障是不是就消失了呢?(虽然一般不会禁用掉但是还是存在风险) 所以我们一般做两种认证一种是前端做一遍认证,在后端做一遍认证. 首先咱们看一下下面的案例: from django.shortcuts import render # Create your views here. def user_list(request): host

django form

ModelForm的继承者有两种保存数据方式: 一:创建新的数据: f = ArticleForm(request.POST)new_article = f.save() 二:更新数据库:a = Article.objects.get(pk=1)f = ArticleForm(request.POST, instance=a)f.save() 保存时候的commit选项: f = AuthorForm(request.POST)new_author = f.save(commit=False)n

Django form模块使用心得

最近用Django 写了一个网站,现在来分享一下对Django form 的一些心得. 一,创建一个表单 创建一个Form表单有两种方式: 第一种方式是继承于forms.Form,的一个子类,通过在form中选择你需要的类型来规定表单之 中字段的类型 Java代码   class ContactForm(forms.Form): subject = forms.CharField(max_length=100) message = forms.CharField(required=False)