前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >django设置cookie和sessi

django设置cookie和sessi

作者头像
py3study
发布2020-01-16 12:45:34
8840
发布2020-01-16 12:45:34
举报
文章被收录于专栏:python3python3

1 设置cookie

本例中应用名称为cookie

模型model

from django.db import models

代码语言:javascript
复制
from django.db import models
class UserInfo(models.Model):
    username = models.CharField(max_length=64)
    password = models.CharField(max_length=64)

数据库迁移

代码语言:javascript
复制
python manage.py makemigrations
python manage.py migrate

给数据库添加数据

路由urls

代码语言:javascript
复制
from django.contrib import admin
from django.urls import path
from cookie import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('login/', views.login),
    path('index/', views.index),
]

视图函数

代码语言:javascript
复制
from django.shortcuts import render, redirect, HttpResponse
from cookie import models

def login(request):
    ret = ""
    if request.method == "POST":
        user = request.POST.get("user")
        pwd = request.POST.get("pwd")
        # 查询数据库中的用户名和密码
        user_obj = models.UserInfo.objects.filter(username=user, password=pwd).first()
        if user_obj:
            """
            如果验证通过,则重定向至index并设置cookie
            """
            obj = redirect("/index/")
            obj.set_cookie("is_login", True, 30)  # cookie有效期为30秒
            obj.set_cookie("username", user_obj.username)
            return obj
        else:
            ret = "用户名或密码错误"
    return render(request, "login.html", {"ret": ret})


def index(request):
    is_login = request.COOKIES.get("is_login")
    username = request.COOKIES.get("username")
    if not is_login:
        return redirect("/login/")
    return render(request, "index.html", {
        "user": username
    })    

模板页面

登录页面 login.html

代码语言:javascript
复制
<body>
<h3>用户登录页面</h3>
<form action="/login/" method="post">
    {% csrf_token %}
    <p>用户名:<input type="text" name="user"></p>
    <p>密码:<input type="password" name="pwd"></p>
    <p><span>{{ ret }}</span></p>
    <input type="submit" value="登录" class="sub_btn">
</form>
</body>

首页index.html

代码语言:javascript
复制
<body>
<h3>这是index页面。你好 {{ user }}</h3>
</body>

下来访问测试一下

点击登录

可以看到,已经按预想跳转至index页面

下来看看设置的cookie

 再来看看,重定向访问时携带的cookie值

2 设置session

创建应用

python manage.py startapp session

注册应用

设置settings.py

代码语言:javascript
复制
INSTALLED_APPS = [
    ...
    'cookie.apps.CookieConfig',
    'session.apps.SessionConfig'
]

路由urls

代码语言:javascript
复制
.....
from session import views as session_views

urlpatterns = [
    ......
    path('session_login', session_views.session_login),
    path('session_index', session_views.session_index),
    path('session_logout', session_views.session_logout),
]

视图函数

代码语言:javascript
复制
from django.shortcuts import render, redirect
from cookie import models  # 由于要用到数据,所有要吃cookie应用里面导入

def session_login(request):
    ret = ""
    if request.method == "POST":
        user = request.POST.get("user")
        pwd = request.POST.get("pwd")
        user_obj = models.UserInfo.objects.filter(username=user, password=pwd).first()
        if user_obj:
            """
            如果验证通过,则设置session,并返回session_index
            """
            request.session["is_login"] = True
            request.session["username"] = user_obj.username
            obj = redirect("/session_index/")
            return obj
        else:
            ret = "用户名或密码错误"
    return render(request, "session_login.html", {"ret": ret})
代码语言:javascript
复制
def session_index(request):
    is_login = request.session.get("is_login")
    username = request.session.get("username")
    if not is_login:
        """如果没有登录则跳转至登录页面"""
        return redirect("/session_login")

    return render(request, "session_index.html", {"user": username})


def session_logout(request):
    request.session.flush()
    return redirect("/session_login/")

模板页面

session_index.html

代码语言:javascript
复制
<h3>基于session的用户登录</h3>
<form action="/session_login/" method="post">
    {% csrf_token %}
    <p>用户名:<input type="text" name="user"></p>
    <p>密码:<input type="password" name="pwd"></p>
    <p><span>{{ ret }}</span></p>
    <input type="submit" value="登录" class="sub_btn">
</form>

session_index.html

代码语言:javascript
复制
<body>
<h3>这是session_index页面。</h3>
<h3>你好 {{ user }}</h3>
<a href="/session_logout/">注销</a>
</body>

下来测试

可以看到数据库中session表已经有数据了,session_key为随机生成的,为请求时携带的cookie键,session_data为

代码语言:javascript
复制
request.session["is_login"] = True
request.session["username"] = user_obj.username,经过某种算法加密后的数

再来看看页面

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-05-31 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 设置cookie
    • 模型model
      • 路由urls
        • 视图函数
          • 模板页面
          • 2 设置session
            • 创建应用
              • 注册应用
                • 路由urls
                  • 视图函数
                    • 模板页面
                    相关产品与服务
                    数据库
                    云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档