Django框架中Ajax GET与POST请求的实战应用

news2024/11/27 10:55:40

在这里插入图片描述

系列文章目录

以下几篇侧重点为JavaScript内容0.0

  1. JavaScript入门宝典:核心知识全攻略(上)
  2. JavaScript入门宝典:核心知识全攻略(下)
  3. Django框架中Ajax GET与POST请求的实战应用
  4. VSCode调试揭秘:Live Server助力完美测试Cookie与Session,远超“Open in Browser“!(writing…)`

文章目录

  • 系列文章目录
  • 前言
  • 一、跨域
  • 二、登录
    • 1.前端html
    • 2.后端逻辑
  • 三、注册
    • 1.前端html
    • 2.后端逻辑
    • 最后遇到的一个小问题:


前言

    在本博客中,我们将通过登录注册两个实战案例,深入探讨如何在Django项目中使用Ajax进行网络请求以实现数据交互。同时,我们还将详细解析如何利用Cookie和Session来管理用户状态,确保用户信息的安全性和一致性。


一、跨域

跨域问题参考下面这篇文章:
跨域问题与Django解决方案:深入解析跨域原理、请求处理与CSRF防护

二、登录

1.前端html

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Login</title>
    <script src="./js/jquery-2.2.0.min.js"></script>
    <script>
        function fnLogin() {
            var username_label = document.getElementById('username');
            var password_label = document.getElementById('password');
            var user = {
                username: null,
                password: null,
            }
            user.username = username_label.value;
            user.password = password_label.value;

            $.ajax({
                url: "http://127.0.0.1:8000/app/login/",
                type: "POST",
                dataType: "json",
                data: user,
                xhrFields: { withCredentials: true }, //设置支持携带cookie
                success: function (response) {
                    if (response.code == '200') {
                        alert(response.message)
                        window.location.href = 'exd8_news.html';
                    } else {
                        alert(response.message)
                    }
                },
                error: function () {
                    alert("请求失败!")
                }, async: true
            })
        }

    </script>
</head>

<body>
    <input type="text" id="username" placeholder="请输入用户名:"><br>
    <input type="text" id="password" placeholder="请输入密码:"><br>
    <input type="button" value="Login" onclick="fnLogin();">


</body>

</html>

2.后端逻辑

# app/views.py
class LoginView(View):
    def post(self,request):
        username = request.POST.get('username')
        password = request.POST.get('password')

        try:
            user = UserModel.objects.get(username=username)
            if user.password == password:
                request.session['userid'] = user.id #
                print("-------------------")
                print(request.session['userid']) 
                return JsonResponse({"message": "登录成功!", "code": "200"})
            else:
                return JsonResponse({"message": "密码错误!登录失败!", "code": "201"})
        except Exception as e:
            print(e)
            return JsonResponse({"message": "用户不存在!登录失败!", "code": "202"})

三、注册

1.前端html

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Register</title>
    <script src="./js/jquery-2.2.0.min.js"></script>
    <script>
        function fnRegister() {
            var username_label = document.getElementById('username');
            var phone_label = document.getElementById('phone');
            var password_label = document.getElementById('password');
            var cpassword_label = document.getElementById('cpassword');

            var user = {
                username: null,
                phone: null,
                password: null,
                cpassword: null,
            }

            user.username = username_label.value;
            user.phone = phone_label.value;
            user.password = password_label.value;
            user.cpassword = cpassword_label.value;

            $.ajax({
                url: "http://127.0.0.1:8000/app/register/",
                type: "POST",
                dataType: "json",
                data: user,
                success: function (response) {
                    if (response.code == '200') {
                        alert(response.message + "跳转到登录页面!")
                        console.log(response);
                        window.location.href = 'login.html';
                    } else {
                        alert(response.message)

                    }
                },
                error: function () {
                    console.log("请求失败!!!");
                }
            })

        }
    </script>
</head>

<body>
    用户名:<input type="text" id="username"><br>
    手机号:<input type="text" id="phone"><br>
    密码:<input type="password" id="password"><br>
    确认密码:<input type="password" id="cpassword"><br>
    <button onclick="fnRegister()">注册</button>
</body>

</html>

2.后端逻辑

# app/views.py
class RegisterView(View):

    def post(self, request):
        # 用户名username,手机号phone,密码password
        # put  delete

        # postman 测试:
        # 1.传参为raw格式时
        # 2.传参为x-www-form-urlencoded时

        print(request.POST)
        print("-------------------")
        print(request.body)

        # -------------------------------------------------
        # 1.传参为raw格式时
        # 字符串转成字典 通过decode解码
        # 使用put  delete时:
        # data = request.body.decode()
        # print("data:" + data)
        # # #***使用raw 传参数时***
        # import json
        # res_dict = json.loads(data)
        # print("username:" + res_dict.get('username'))
        #
        # username = res_dict.get('username')
        # password = res_dict.get('password')
        # phone = res_dict.get('phone')
        # cpassword = res_dict.get('cpassword')

        # -----------------------------------------------------------------
        # 2.传参为x-www-form-urlencoded时

        username = request.POST.get('username')
        password = request.POST.get('password')
        phone = request.POST.get('phone')
        cpassword = request.POST.get('cpassword')

        import re
        if re.match(r'^1[3-9]\d{9}$', phone):
            try:
                UserModel.objects.get(phone__exact=phone)
                return JsonResponse({'message': '用户已存在,请登录'})
            except:
                # 两次密码是否一致
                if password == cpassword:
                    user = UserModel()
                    user.name = username
                    user.password = password
                    user.phone = phone
                    user.save()
                    # 取决于逻辑
                    # request.session['']
                    return JsonResponse({'message': '注册成功'})
                else:
                    return JsonResponse({'message': '两次输入密码不一致'})
        else:
            return JsonResponse({'message': '手机号不满足规则'})


1.使用postman测试POST传参为raw格式时:
在这里插入图片描述


控制台输出:
在这里插入图片描述


2.使用postman测试POST传参为x-www-form-urlencoded时:
在这里插入图片描述


控制台输出:
在这里插入图片描述

最后遇到的一个小问题:

使用vscode测试前端页面时使用open in browser和open with live server,可能给会导致不同的结果,详情见下篇文章:VSCode调试揭秘:Live Server助力完美测试Cookie与Session,远超“Open in Browser“!(writing...)
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1802833.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

详解 Flink 的时间语义和 watermark

一、Flink 时间语义类型 Event Time&#xff1a;是事件创建的时间。它通常由事件中的时间戳描述&#xff0c;例如采集的日志数据中&#xff0c;每一条日志都会记录自己的生成时间&#xff0c;Flink 通过时间戳分配器访问事件时间戳Ingestion Time &#xff1a;是数据进入 Flink…

✔️Vue基础+

✔️Vue基础 文章目录 ✔️Vue基础computed methods watchcomputed计算属性methods计算属性computed计算属性 VS methods方法计算属性的完整写法 watch侦听器&#xff08;监视器&#xff09;watch侦听器 Vue生命周期Vue生命周期钩子 工程化开发和脚手架脚手架Vue CLI 项目目录介…

基于Python的北京天气数据可视化分析

项目用到库 import numpy as np import pandas as pd import datetime from pyecharts.charts import Line from pyecharts.charts import Boxplot from pyecharts.charts import Pie,Grid from pyecharts import options as opts from pyecharts.charts import Calendar 1.2…

【数据结构】栈的应用

目录 0 引言 1 栈在括号匹配中的应用 2 栈在表达式求值中的应用 2.1 算数表达式 2.2 中缀表达式转后缀表达式 2.3 后缀表达式求值 3 栈在递归中的应用 3.1 栈在函数调用中的作用 3.2 栈在函数调用中的工作原理 4 总结 0 引言 栈&#xff08;Stack&#xff09;是一…

Python001

Python 是一种高级编程语言。它具有以下显著特点&#xff1a;1. 简单易学&#xff1a;语法相对简洁明了&#xff0c;对初学者很友好。2. 丰富的库&#xff1a;拥有大量强大的内置库和第三方库&#xff0c;可用于各种领域&#xff0c;如数据分析、机器学习、Web 开发等。3. 可读…

Python应用开发——30天学习Streamlit Python包进行APP的构建(5)

上几次我们已经将一些必备的内容进行了快速的梳理,让我们掌握了streanlit的凯快速上手,接下来我们将其它的一些基础函数再做简单的梳理,以顺便回顾我们未来可能用到的更丰富的函数来实现应用的制作。 st.write_stream 将生成器、迭代器或类似流的序列串流到应用程序中。 …

【网络编程开发】8.TCP连接管理与UDP协议 9.IP协议与ethernet协议

8.TCP连接管理与UDP协议 三次握手 三次握手的过程在TCP/IP网络通信中起着至关重要的作用&#xff0c;它不仅确保了数据的可靠传输&#xff0c;还为两端的数据传输提供了稳定的连接初始化过程。这一过程涉及到几个关键步骤&#xff0c;每个步骤都有其特定的目的和功能。 步骤&…

你可以直接和数据库对话了!DB-GPT 用LLM定义数据库下一代交互方式,数据库领域的GPT、开启数据3.0 时代

✨点击这里✨&#xff1a;&#x1f680;原文链接&#xff1a;&#xff08;更好排版、视频播放、社群交流、最新AI开源项目、AI工具分享都在这个公众号&#xff01;&#xff09; 你可以直接和数据库对话了&#xff01;DB-GPT 用LLM定义数据库下一代交互方式&#xff0c;数据库领…

前端开发高频面试题

好的&#xff0c;以下是对您提出的问题的详细回答&#xff1a; 说说vue动态权限绑定渲染列表&#xff08;权限列表渲染&#xff09; Vue中动态权限绑定渲染列表通常涉及以下步骤&#xff1a; 首先&#xff0c;通过API请求从服务器获取当前用户的权限数据。在Vue组件中&#xff…

Excel 生成所在月份的每一天列表

Excel 的 A2 格是日期 A1Fecha201/03/24 需要生成该日期所在月份的每一天的列表 A1WholeMonth201/03/24302/03/24403/03/24504/03/24605/03/24706/03/24807/03/24908/03/241009/03/241110/03/241211/03/241312/03/241413/03/241514/03/241615/03/241716/03/241817/03/241918…

【稳定检索/投稿优惠】2024年智慧金融与财务管理国际会议(SFFM 2024)

2024 International Conference on Smart Finance and Financial Management 2024年智慧金融与财务管理国际会议 【会议信息】 会议简称&#xff1a;SFFM 2024 截稿时间&#xff1a;以官网为准 大会地点&#xff1a;中国广州 会议官网&#xff1a;www.iacsffm.com 会议邮箱&am…

【python】OpenCV—Cartoonify and Portray

参考来自 使用PythonOpenCV将照片变成卡通照片 文章目录 1 卡通化codecv2.medianBlurcv2.adaptiveThresholdcv2.kmeanscv2.bilateralFilter 2 肖像画cv2.divide 1 卡通化 code import cv2 import numpy as npdef edge_mask(img, line_size, blur_value):gray cv2.cvtColor(…

idea2023如何创建普通maven工程项目

解决 1.创建新项目 1.进入创建项目 File -> new -> project 2&#xff0c;project 中有 build system 选择maven 2.在已有项目中创建普通maven工程 1.右键项目选择 new -> Module 2.选择 new Module 其实与新建maven工程没什么区别 em:问题 idea以前的版本是在Mav…

【一百一十】【算法分析与设计】[SDOI2009] HH的项链,树状数组应用,查询区间的种类数,树状数组查询区间种类数

P1972 [SDOI2009] HH的项链 [SDOI2009] HH的项链 题目描述 HH 有一串由各种漂亮的贝壳组成的项链。HH 相信不同的贝壳会带来好运&#xff0c;所以每次散步完后&#xff0c;他都会随意取出一段贝壳&#xff0c;思考它们所表达的含义。HH 不断地收集新的贝壳&#xff0c;因此&am…

第十二届蓝桥杯C++青少年组中/高级组选拔赛2020年11月22日真题解析

一、编程题 第1题&#xff1a;求和 【题目描述】 输入一个正整数 N(N < 100)&#xff0c;输出 1 到 N(包含 1 和 N)之间所有奇数的和。 【输入描述】 输入一个正整数 N(N < 100) 【输出描述】 输出 1 到 N 之间的所有奇数的和 【输入样例】 3【输出样例】 4答案&…

Llama模型家族之拒绝抽样(Rejection Sampling)(九) 强化学习之Rejection Sampling

LlaMA 3 系列博客 基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;一&#xff09; 基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;二&#xff09; 基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;三&#xff09; 基于 LlaMA…

利用streamlit结合langchain_aws实现claud3的页面交互

测试使用的代码如下 import streamlit as st from langchain_aws import ChatBedrockdef chat_with_model(prompt, model_id):llm ChatBedrock(credentials_profile_name"default", model_idmodel_id, region_name"us-east-1")res llm.invoke(prompt)re…

UiPath发送邮件给多人时需要注意哪些限制?

UiPath发送邮件给多人的步骤&#xff1f;如何使用UiPath发信&#xff1f; 尽管UiPath提供了强大的邮件发送功能&#xff0c;但在批量发送邮件时&#xff0c;有一些限制和注意事项是我们必须了解的。AokSend将详细介绍这些限制&#xff0c;并提供一些优化建议。 UiPath发送邮件…

视频监控管理平台LntonCVS视频汇聚平台充电桩视频监控应用方案

随着新能源汽车的广泛使用&#xff0c;公众对充电设施的安全性和可靠性日益重视。为了提高充电桩的安全管理和站点运营效率&#xff0c;LntonCVS公司推出了一套全面的新能源汽车充电桩视频监控与管理解决方案。 该方案通过安装高分辨率摄像头&#xff0c;对充电桩及其周边区域进…

纷享销客安全体系:安全合规认证

安全合规认证是指组织通过独立的第三方机构对其信息系统和数据进行评估和审查&#xff0c;以确认其符合相关的安全标准、法律法规和行业要求的过程。 安全合规认证可以帮助组织提高信息系统和数据的安全性&#xff0c;并向客户、合作伙伴和监管机构证明其符合相关的安全标准和…