django框架下ajax获取cookie和session的方法以及简单的vue

Django的配置:

  pycharm中创建django工程之后注释掉MIDDLEWARE项中的‘django.middleware.csrf.CsrfViewMiddleware‘。此处作用是为了能够让js获取到cookie值

  同时为了使用mysql,我们在setting中修改DATABASES中的‘default‘项为

        ‘ENGINE‘: ‘django.db.backends.mysql‘,
        ‘NAME‘: ‘db_test_shop1‘,
        ‘HOST‘:‘127.0.0.1‘,
        ‘PORT‘:3306,
        ‘USER‘:‘root‘,
        ‘PASSWORD‘:‘1415926‘,    

  参数一目了然无需多讲

  在django的控制台下执行python manage.py startapp 你的app项目名来新建一个app项目,此后的工程都在这里写。然后在setting中的INSTALLED_APPS项中注册app,添加‘django.apps.你的app的名字Config‘

  同时在setting中添加以下代码来寻找static路径和模板代码路径

STATICFILES_DIRS=[
    os.path.join(BASE_DIR,‘static‘)
]

  开启调试功能的代码为在setting中添加

LOGGING = {
    ‘version‘: 1,
    ‘disable_existing_loggers‘: False,
    ‘handlers‘: {
        ‘console‘:{
            ‘level‘:‘DEBUG‘,
            ‘class‘:‘logging.StreamHandler‘,
        },
    },
    ‘loggers‘: {
        ‘django.db.backends‘: {
            ‘handlers‘: [‘console‘],
            ‘propagate‘: True,
            ‘level‘:‘DEBUG‘,
        },
    }
}

  为了使用现成的数据库中的数据,我们可以通过在控制台中执行python manage.py inspectdb来获取代码,复制粘贴到app中的model文件中

  html模板中若为了使用django的模板语言需要在开头加上{% load static %}

Django中后端的编写

  以上准备工作完成之后在app项目文件夹里的urls里如下配置

from django.contrib import admin
from django.urls import path
from tableapp.views import *

urlpatterns = [
    path(‘admin/‘, admin.site.urls),
    path(‘‘,indexRender_CookieAndSession),
    path(‘test‘,testAjax_CookieAndSession),
    path(‘goTestRender‘,goTestRender),
    path(‘getSession‘,getSession),
]

  path的第一个参数为前端的请求地址,第二个参数为调用的函数

  然后就在view文件里编写函数即可

from django.shortcuts import render
from tableapp.models import *
from django.views.static import HttpResponse
from django.http import JsonResponse
from tableapp.models import *
import json
from django.views.decorators.csrf import csrf_exempt
# Create your views here.

def getSession(request):
    return JsonResponse({"result":request.session.get(json.loads(request.body).get("key"))})

def indexRender_CookieAndSession(request):
    #测试session
    request.session["t1_session"]="session1"
    #删除session: del request.session["t1_session"]
    #网页转发到index.html
    rsp = render(request,"index.html")
    #测试cookie设置
    rsp.set_cookie("t1_cookie",233)
    #删除cookie: rsp.delete_cookie("t1_cookie")
    return rsp

def goTestRender(request):
    return render(request,"test.html")

# @csrf_exempt
def testAjax_CookieAndSession(request):
    #request是json格式传过来的参数,需要转换成字典对象
    params = json.loads(request.body)
    print("testParamInteger:",params["testParamInteger"])
    print("testParamString:", params["testParamString"])
    # 测试session
    request.session["t2_session"] = "session2"

    #orm简单的两表查询
    #   用模型类.objects来进行数据库操作,filter等同于where操作,values_list将查询结果转换成结果元祖,而非values的字典对组成的json对象形式。可以通过切片进行选取操作,[开始位置:结束位置:隔几个取一个](以上参数和切片一样可以任意省略)
    data = TGoods.objects.filter(goods_status=1).values_list("goods_id","goods_name","goods_price","type__t_g_type__type_name")[0:10:1]
    title = ("商品ID","商品名","商品价格","商品类别","操作")
    result = {"result":1,"data":data,"title":title}
    #这里可以替换成 return JsonResponse(result)
    resp = HttpResponse(json.dumps(result),content_type="application/json")
    resp.set_cookie("t2_cookie","cookie2")
    return resp

  然后提前放上测试用的各种代码

<!DOCTYPE html>
<html lang="en">
<head>
    {% load static %}
    <meta charset="UTF-8">
    <script type="text/javascript" src="{% static ‘js/jquery-3.2.1.min.js‘ %}"></script>
    <script type="text/javascript" src="{% static ‘js/jquery-cookie.js‘ %}"></script>
    <script type="text/javascript" src="{% static ‘js/my-session.js‘ %}"></script>
    <title>Title</title>
</head>
<body>
    <a href="goTestRender">跳转到test页面</a>
</body>
<script type="text/javascript">
    console.log("render cookie:",$.cookie("t1_cookie"))
    console.log("render session:",getSession("t1_session"))
</script>
</html>

index.html

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
      {% load static %}
    <title>test table</title>
{#    <link rel="stylesheet" href="style.css">#}
    <!-- Delete ".min" for console warnings in development -->
    </head>
  <body>

<!-- 取消这个范围内的django解析,从而解决django与vue语法冲突问题 -->
{% verbatim %}
  <script type="text/x-template" id="my_test_template">
  <table>
      <thead>
        <tr>
            <td v-for="t in title">
                {{ t }}
            </td>
        </tr>
      </thead>
      <tbody>
            <tr v-for="row in testData">
                <td v-for="d in row">{{ d }}</td>
            </tr>
      </tbody>
  </table>
</script>
{% endverbatim %}
    <!-- Vue.compent里的变量名=实例化时对应的变量名 -->
    <!-- Vue.compent里的变量名如果是驼峰命名两个单词的话需要用中划线分割 -->
    <my-test-table
        :title="myTitle"
        :test-data="myData"
    ></my-test-table>

  </body>

    <script type="text/javascript" src="{% static ‘js/jquery-3.2.1.min.js‘ %}"></script>
    <script type="text/javascript" src="{% static ‘js/jquery-cookie.js‘ %}"></script>
    <script type="text/javascript" src="{% static ‘js/my-session.js‘ %}"></script>
    <script type="text/javascript" src="{% static ‘js/vue.js‘ %}"></script>
    <script type="text/javascript" src="{% static ‘js/table.js‘ %}"></script>
</html>

test.html

function getSession(key) {
    result = undefined
    $.ajax({
        url:"getSession",
        type:"post",
        dataType:"json",
        data:JSON.stringify({key:key}),
        async:false,
        success:function (data) {
            result = data.result
        }
    })
    return result
}

my-session.js

Vue.component(‘my-test-table‘,{
    template:"#my_test_template",
    props:{
        title:Array,
        testData:Array,
    }
})

function getData()
{
    $.ajax({
        url:"test",
        type:"post",
        dataType:"json",
        data:JSON.stringify({
            testParamInteger:1,
            testParamString:"测试参数"
        }),
        success:function (data) {
            console.log(data)
            //  传过来的参数自动被解析成对象了,无需转换
            var myVue = new Vue({
                el:"my-test-table",
                data:{
                    myTitle:data.title,
                    myData:data.data
                }
            })

            //  测试cookie和session
            console.log("Ajax Cookie:"+$.cookie("t2_cookie"))
            console.log("Ajax Session:"+getSession("t2_session"))
        }
    })
}

$(function () {
    getData()
})

table.js

  测试结果

难点解释:

  前端的my-session.js中的async:flase是为了取消异步,能让返回值在获取到结果之后再返回

  cookie获取方法为引入jquery-cookie.js文件,调用$.cookie即可

  session的获取方法为my-session中再次请求

  此外其他点都在注释里了

原文地址:https://www.cnblogs.com/dofstar/p/11711502.html

时间: 2024-10-07 19:28:37

django框架下ajax获取cookie和session的方法以及简单的vue的相关文章

Django框架(九)--cookie和session

cookie和session组件 cookie 1.cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不会直接影响后面的请求响应情况. 一句有意思的话来描述就是人生只如初见,对服务器来说,每次的请求都是全新的. 状态可以理解为客户端和服务器在某次会话中产生的数据,那无状态的就以为这些数据不会被保留.会话中产生的数据又是我们需要保存的,也就是说要“保持状态”.因此C

Django框架下的小人物--Cookie

1. 什么是Cookie,它的用途是什么? Cookies是一些存储在用户电脑上的小文件.它是被设计用来保存一些站点的用户数据,这样能够让服务器为这样的用户定制内容,后者页面代码能够获取到Cookie值然后发送给服务器.比如Cookie中存储了所在地理位置,以后每次进入地图就默认定位到改地点即可. 2. 通过什么方式能获取到Cookie的内容,我能查看自己电脑上的Cookie吗? 能通过Web Server或者客户端浏览器来获取到Cookie.多数浏览器能够配置允许用户访问Cookies,但是注

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

MySQL在Django框架下的基本操作(MySQL在Linux下配置)

[原]本文根据实际操作主要介绍了Django框架下MySQL的一些常用操作,核心内容如下: ------------------------------------------------------------------------------------------------- 1. Linux环境下MySQL的安装与配置 2. [Linux]MySQL在Django框架下的基本操作 3. 本文相关的一些参考网址 注:本文会根据实践,持续更新文档,如有错误,希望读者指出哈!~ -----

Django框架下多国语言支持设置

Django框架下多国语言支持设置,步骤如下: 1.安装GNU gettext tools Django是通过gettext组建支持多国语言的,因此需要安装 下载地址为:http://gnuwin32.sourceforge.net/packages/gettext.htm window平台下载Binaries版本(编译好的exe,直接安装),然后设置系统路径 ubuntu平台:sudo apt-get install gettext 2.设置项目下得settings.py  = LOCALE_

Django框架下的增强分页组件

本文通过文章同步功能推送至博客园,显示排版可能会有所错误,请见谅! 描述:Django框架内置了分页功能,但其只能满足简单需求,难以实现复杂功能. 实现代码: #!/usr/bin/env python3 # -*- coding:utf-8 -*- __auth__ = 'Song Wei' from django.utils.safestring import mark_safe from math import ceil class Paginator: '''自定制分页功能,支持设置标签

Yii框架操作cookie与session的方法实例详解

cookie操作 设置cookie ? 1 2 3 4 5 6 //获取response->cookies组件 $cookies = \Yii::$app->response->cookies; //设置cookie数组 $array_cookies=array('name'=>'user','value'=>'doubly'); //添加cookie数据 $cookies->add(new Cookie($array_cookies)); 删除cookie ? 1 $

ThinkPHP5.0下,利用Cookie和Session来存储用户信息

利用tp5框架封装好的Cookie类和Session类.若发现过期时间没有生效,可以试试清除缓存. 登录页面Login.php <?php/** * Created by PhpStorm. * User: zjl * Date: 2018/11/1 * Time: 15:21 */namespace app\admin\controller; use think\Controller;use think\Request;use think\Session;use think\Cookie; c

Flask 框架中 上下文基础理念,包括cookie,session存储方法,requset属性,current_app模块和g模块

Flask中上下文,分为请求上下文和应用上下文.既状态留存 ,就是把变量存在某一个地方可以调用 请求上下文:实际就是request和session用法理念,既都是可以存储东西. 应用上下文:既变量共享,就是把东西存储在变量里可以打印预览,应用上下文包括 current_app模块和g模块 cookie方法增,查,删. 注:存储cookie时使用set_coooki方法存储key--calve形式数据,另一个参数max_age 是指定的存活时间. 调用cookie的方法是通过request模块的c