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

vue

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中再次请求

  此外其他点都在注释里了

以上是 django框架下ajax获取cookie和session的方法以及简单的vue - 黯星 的全部内容, 来源链接: utcz.com/z/380231.html

回到顶部