Django|Ajax 入门、JSON 返回、ECharts 图表、文件上传完整笔记

一、初识 Ajax

浏览器传统提交请求方式:URL 地址、Form 表单提交(GET/POST)

特点:页面整体刷新

Ajax:可以偷偷异步发送请求,页面不刷新,局部更新页面,示例使用 jQuery 实现 Ajax。

1.1 Ajax 发送 GET 请求

前端(需要引入 jQuery)

复制代码
<script type="text/javascript">
    function clickMe(){
        $.ajax({
            url:'/task/ajax/',
            type:"GET",
            data:{
                n1:123,
                n2:456,
            },
            success:function (res){
                console.log(res);
            }
        })
    }
</script>

Django 后端视图获取 GET 参数

复制代码
def task_ajax(request):
    print(request.GET)
    return HttpResponse('收到数据了')

1.2 Ajax 发送 POST 请求

Django 默认开启 CSRF 校验,测试可以使用@csrf_exempt装饰器豁免校验。

前端代码

复制代码
<script type="text/javascript">
    function clickMe(){
        $.ajax({
            url:'/task/ajax/',
            type:"POST",
            data:{
                n1:123,
                n2:456,
            },
            success:function (res){
                console.log(res);
            }
        })
    }
</script>

后端视图

复制代码
from django.views.decorators.csrf import csrf_exempt

@csrf_exempt
def task_ajax(request):
    print(request.POST)
    return HttpResponse('收到数据了')

1.3 Ajax 返回 JSON 格式数据

开发中 Ajax 一般返回 JSON 数据,Django 提供JsonResponse快速返回 json 对象。

前端代码

复制代码
<script type="text/javascript">
    $(function (){
        // dom加载完成自动执行
        bindBtn1Event();
    })
    function bindBtn1Event(){
        $('#btn1').click(function (){
            $.ajax({
                url:'/task/ajax/',
                type:"post",
                data:{
                    n1:123,
                    n2:456,
                },
                dataType:'JSON', //自动把后端json字符串转为js对象
                success:function (res){
                    console.log(res);
                    console.log(res.status);
                    console.log(res.data);
                }
            })
        })
    }
</script>

后端代码

复制代码
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt

@csrf_exempt
def task_ajax(request):
    print(request.POST)
    data_dict={"status":True,'data':[11,22,33,44,55]}
    return JsonResponse(data_dict)

二、Django 全栈知识点回顾

  1. 安装 Django

    pip install Django

  2. 创建 Django 项目

    django-admin startproject 项目名字

注意:PyCharm 一键创建 Django 项目,需要检查settings.py,多余自动生成templates配置可按需删除。

  1. 创建 APP 并且注册

    python manage.py startapp app01

settings.py 注册 APP

复制代码
INSTALLED_APPS = [
    # ...
    'app01.apps.App01Config',
]

⚠️不注册 APP,models.py 模型类无法生成数据库表。

  1. 静态文件 static、模板 templates 静态文件、模板一般放置在 app 目录下;模板使用{% static 'xxx' %}加载静态资源。

  2. MySQL 数据库配置 安装驱动:

    pip install mysqlclient

需要提前在 MySQL 客户端手动创建数据库。

settings.py 数据库配置

复制代码
DATABASES = {
    'default':{
        'ENGINE':'django.db.backends.mysql',
        'NAME':'day16',
        'USER':'root',
        'PASSWORD':'root',
        'HOST':'127.0.0.1',
        'PORT':3306,
    }
}
  1. 数据库迁移 在models.py编写模型类之后执行迁移命令

    python manage.py makemigrations
    python manage.py migrate

  2. 开发流程

  • urls.py:配置路由,url 与视图函数映射关系
  • views.py:视图函数,编写业务逻辑
  • templates:HTML 模板,支持模板语法、模板继承
  • Form / ModelForm 组件:生成标签、表单校验、保存数据、错误提示
  • Cookie & Session:保存登录会话信息
  • 中间件:process_request实现全局登录认证拦截
  • ORM 完成数据库增删改查、分页功能

三、Ajax 拓展

  1. Ajax 业务案例:订单业务中大量使用 Ajax 异步交互。

3.1 图表可视化

常用绘图插件:

3.2 文件上传

form 表单上传文件,必须添加属性:enctype="multipart/form-data"

复制代码
<form method="post" enctype="multipart/form-data">
    {% csrf_token %}
    <input type="text" name="username">
    <input type="file" name="avatar">
    <input type="submit" value="提 交">
</form>

后端视图接收文件:

文件对象存储在request.FILES,request.POST只能获取普通表单文本数据。

复制代码
def upload_list(request):
    if request.method == "GET":
        return render(request,'upload_list.html')

    # 获取上传文件对象
    file_object = request.FILES.get("avatar")
    print(file_object.name) # 获取上传文件原始名称

    # 将文件保存到本地磁盘
    f = open(file_object.name,mode='wb')
    for chunk in file_object.chunks():
        f.write(chunk)
    f.close()

    return HttpResponse("文件上传完成")

说明:file_object.chunks()分块读取大文件,避免一次性加载全部文件占用内存。

相关推荐
Hello_Pyhx2 天前
NWinfo 导出 Windows 硬件信息:从 JSON 报告到缺项排查
windows·json
程序员大阳2 天前
副队长JavaScript教程(66)-本地存储实战:待办事项网页的开发
javascript·json·实战·待办事项·本地存储·案例
视觉小萌新3 天前
AI Class 3 · Chapter 2-3:函数、异常、文件读写+JSON / JSONL 读写(小白版)
人工智能·python·json
翊众建站4 天前
用 JSON-LD 给企业官网做结构化数据:LocalBusiness 与 FAQPage 实践笔记
人工智能·搜索引擎·json
Patrick_Wilson4 天前
读懂一个 Go JSON 处理函数:从输入数据追踪结构体、校验与错误返回
go·json·编程语言
实名上网宋凯宣5 天前
Django
后端·python·django
汤米粥6 天前
cmd手动创建的Django项目怎么用社区版Pycharm运行起来
python·pycharm·django
January12076 天前
【AI方法笔记】2026-11-02:模型流式吐 JSON 时,前端会遇到四种崩法
前端·人工智能·笔记·json
程序员大阳6 天前
副队长JavaScript教程(67)-Ajax初识:背景、历史与核心概念
javascript·ajax·同步·异步·概念·背景·来是