【银角大王——Django课程——Ajax请求】

Ajax请求

Ajax请求(页面不刷新)

依赖JQuery

Ajax基本代码代码

python 复制代码
{% block js %}
    <script type="text/javascript">
        $(function(){
            //页面框架加载完成之后代码自动执行
            bindBtnEvent();
        })
        function bindBtnEvent(){
            $("#btn1").click(function(){
                    $.ajax({
                        url:'/task/ajax/',
                        type:"get",
                        data:{
                            n1:123,
                            n2:456

                        },
                        dataType:"JSON",
                        success:function(res){
                            console.log(res);
                            console.log(res.status);
                            console.log(res.data);
                }
            })
            })
        }
    </script>
{% endblock %}
        

url.py编写------他返回的是一个json数据

python 复制代码
    #任务管理
    path('task/list/',views.task_list),
    #
    path('task/ajax/',views.task_ajax),
    path('task/add/',views.task_add),
    

view.py编写

python 复制代码
#导入
# from app01 import models
# from app01.utils.bootstrap import BootStrapModelForm
from django import forms
class TaskModelForm(BootStrapModelForm):
    class Meta:
        model =models.Task
        fields ="__all__"
        widgets ={
            "detail":forms.TextInput

        }




#任务列表
def task_list(request):
    
    #实例化
    form =TaskModelForm
    return render(request,"task_list.html",{"form":form})


#导入
from django.views.decorators.csrf import csrf_exempt


import json
from django.http import JsonResponse
# @csrf_exempt
def task_ajax(request):
    print(request.GET)
    data_dict = {"status":True,'data':[11,22,33,44]}
    json_string = json.dumps(data_dict)
    return HttpResponse(json_string)
    #return JsonResponse(data_dict)

@csrf_exempt
def task_add(request):
    #< QueryDict: {'level': ['1'], 'title': ['标题'], 'detail': ['详细信息'], 'user': ['2']} >

    # print(request.POST)
    
    #用户发送过来的数据进行校验(modelForm进行校验)
    form = TaskModelForm(data=request.POST)
    if form.is_valid():
        form.save()
        data_dict = {"status": True}
        return HttpResponse(JsonResponse(data_dict))
    data_dict ={"status":False,"error":form.errors}
    return HttpResponse(json.dumps(data_dict,ensure_ascii=False))

在HTML中编写

html 复制代码
{% extends 'layout.html'%}

{% block content %}
    <div class="container">
        <div class="panel panel-default">
              <div class="panel-heading">新建任务表单</div>
              <div class="panel-body">

                    <form  id="formAdd">
                      <div class="clearfix">
                          {% for field in form %}
                            <div class="col-xs-6">
                                  <div class="form-group" style="position:relative; margin-bottom:20px;">
                                        <label >{{ field.label }}</label>
                                        {{ field }}
                                        <span class="error-msg" style="color:red; position: absolute;"></span>
                                  </div>
                            </div>
                          {% endfor %}
                          <div class="col-xs-6">
                            <button id="btnAdd" type="button" class="btn btn-primary">提 交</button>
                          </div>
                      </div>

                </form>

              </div>
        </div>



        <hr/>
        <h1>Ajax学习</h1>

        <h3>示例1</h3>
        <input id="btn1" type="button" class="btn btn-primary" value="点击1" onclick="clickMe();">
        <h3>示例2</h3>
        <input id="txtUser" type="text"  placeholder="姓名">
        <input id="txtAge" type="text"  placeholder="年龄">
        <input id="btn2" type="button" class="btn btn-primary" value="点击2" onclick="clickMe();">
        <h3>示例3</h3>
        <form id="form3">
        <input name="user"  type="text"  placeholder="姓名">
        <input name="age" type="text"  placeholder="年龄">
        <input name="email"  type="text"  placeholder="邮箱">
        <input name="more"  type="text"  placeholder="介绍">
        <input id="btn3" type="button" class="btn btn-primary" value="点击3" >
        </form>
    </div>

{% endblock %}

{% block js %}
    <script type="text/javascript">
        $(function(){
            //页面框架加载完成之后代码自动执行
            bindBtnEvent();
            bindBtnEvent2();
            bindBtnEvent3();
            bindBtnAddEvent();


        })
        function bindBtnEvent(){
            $("#btn1").click(function(){
                    $.ajax({
                        url:'/task/ajax/',
                        type:"get",
                        data:{
                            n1:123,
                            n2:456

                        },
                        dataType:"JSON",
                        success:function(res){
                            console.log(res);
                            console.log(res.status);
                            console.log(res.data);
                }
            })
            })
        }
        function bindBtnEvent2(){
            $("#btn2").click(function(){
                    $.ajax({
                        url:'/task/ajax/',
                        type:"get",
                        data: {
                            name:$("#txtUser").val(),
                            age:$("#txtAge").val()

                        },

                        dataType:"JSON",
                        success:function(res){
                            console.log(res);
                            console.log(res.status);
                            console.log(res.data);
                }
            })
            })
        }
        function bindBtnEvent3(){
            $("#btn3").click(function(){
                    $.ajax({
                        url:'/task/ajax/',
                        type:"get",
                        data:$("#form3").serialize(),
                        dataType:"JSON",
                        success:function(res){
                            console.log(res);
                            console.log(res.status);
                            console.log(res.data);
                }
            })
            })
        }
        function bindBtnEvent3(){
            $("#btnAdd").click(function(){

                    $(".error-msg").empty();

                    $.ajax({
                        url:'/task/add/',
                        type:"post",
                        data:$("#formAdd").serialize(),
                        dataType:"JSON",
                        success:function(res){
                            if(res.status){
                                alert("添加成功!")
                            } else {
                                $.each(res.error,function(name,data){
                                    $("#id_"+ name).next().text(data[0]);
                                }

                            )


                            }
                }
            })
            })
        }


    </script>
{% endblock %}

在model.py中编写

python 复制代码
#任务表    
class Task(models.Model):
    level_choices ={
        (1,"紧急"),
        (2,"重要"),
        (3,"临时"),
    }
    level = models.SmallIntegerField(verbose_name="级别",choices=level_choices,default=1)
    title = models.CharField(verbose_name="标题",max_length=64)
    detail = models.TextField(verbose_name="详细信息")
    
    user = models.ForeignKey(verbose_name="负责人",to="Admin",on_delete=models.CASCADE)

最终显示样式

为了是管理员表显示name而不是对象

python 复制代码
#输出显示函数------不输出对象
    def __str__(self):
        return self.username

注:为了节约时间不像之前那样详细,之后有时间复习我会重新编辑。

相关推荐
天天要nx3 分钟前
D64【python 接口自动化学习】- python基础之数据库
数据库·python
feifeikon42 分钟前
Python Day5 进阶语法(列表表达式/三元/断言/with-as/异常捕获/字符串方法/lambda函数
开发语言·python
杰仔正在努力1 小时前
python成长技能之枚举类
开发语言·python
Eiceblue1 小时前
通过Python 调整Excel行高、列宽
开发语言·vscode·python·pycharm·excel
Jam-Young2 小时前
Python中的面向对象编程,类,对象,封装,继承,多态
开发语言·python
Light602 小时前
低代码牵手 AI 接口:开启智能化开发新征程
人工智能·python·深度学习·低代码·链表·线性回归
墨绿色的摆渡人2 小时前
用 Python 从零开始创建神经网络(六):优化(Optimization)介绍
人工智能·python·深度学习·神经网络
小han的日常2 小时前
pycharm分支提交操作
python·pycharm
明月清风徐徐3 小时前
Scrapy爬取豆瓣电影Top250排行榜
python·selenium·scrapy
theLuckyLong3 小时前
SpringBoot后端解决跨域问题
spring boot·后端·python