django学习 -- 前后端不分离的 -- part.3

50.ajax请求

  • get请求
$.ajax({
    url : '你的url',
    type : 'get',
    data:{
        ...
        //你的数据 json(k-v对)
    },
    dataType:'JSON', //将请求道的json数据转化为js对象
    success:function(res){ //res是返回值
        //你的操作...
    }
})
  • post请求
$.ajax({
    url : '你的url',
    type : 'post',
    data:{
        ...
        //你的数据 json(k-v对)
    },
    dataType:'JSON', //将请求道的json数据转化为js对象
    success:function(res){ //res是返回值
        //你的操作...
    }
})

免除scrf的认证(这样ajax就可以不用携带csrf)

from django.views.decorators.csrf import csrf_exempt

@csrf_exempt
def exanple(request):
    #你的视图函数

PS. 需要记得,ajax请求的url在django中也需要注册在urls.py文件中。
还有,ajax请求后端返回的必须是json格式(就是使用python的json模块对字典进行处理(dumps)一下);或者django中有JsonResponse可以字典打包为json,不用自己处理。
如果jq直接选中表单(通过id),通过serialize()方法就可以获取表单的所有数据(例如$('#form').serialize()),之后ajax发送到后台的就是一整个表单数据(后端通过request.POST获取的是一个字典)。

51.校验ajax提交的请求

  • 通过modelform
    4-12 1:00:50
    因为ajax提交表单数据后,后台获取的是一个字典,因此可以通过modelform的data实例化,然后使用is_valid()进行校验。

52.form.errors中到底是什么

是一个django中的ErrorDict,它包含一个as_json()方法,可以自动帮助我们将它转化为json信息

53.jq中的$.each()可以遍历给定的对象

$.each(对象,function(key,val ) => {
//...进行操作,k,v是假设他是一个字典对象,如果是列表或者其他的可迭代对象,那么就给函数传入的参数做相应的变化即可
}).

54.jq的.next()方法

选择给定元素紧邻的下一个元素
解释link

55.记不清了可以回顾

56.jq的empty()方法

57.modelform后端自定义储存

如果我们设定了一个表单,但是用户不能修改编号等随机生成的信息,那么就需要在获取到post表单信息之后,手动添加。
对于一个实例化之后的modelform类,通过modelformexample.instance.自定属性=来添加用户输入没有包含的字段。

58.modelform校验空字段

  • 如果在字段设置的时候添加required = False,那么表单字段可以为空,默认的True代表表单字段必须不能为空,否则会在校验之后添加“该字段不能为空”的错误提示信息。但是这个仅仅只是让表单不验空,后面的clean_[字段]还是会默认执行的(如果没有这个钩子函数就相当于不进行校验)。
  • reference
    PS. 当然,如果你在定义modelform或者form的时候不添加对应的字段,那么就不会校验这个字段,然后通过.instance.自定属性=来自定义储存字段,应用例如订单的完成事件、订单的编号等。
  • form和modelform的校验会发生在三种情况下:调用is_valid() ,调用.errors获取错误信息的时候还有直接调用full_clean()方法的时候。

These are normally executed when you call the is_valid() method on a form. There are other things that can also trigger cleaning and validation (accessing the errors attribute or calling full_clean() directly), but normally they won’t be needed.
reference_django_official

59. 登录系统的用户录入到form表单中,不需要用户填写

通过session
request.session['info'][之前储存的字段属性]

60. jq清空表单输入

  • 通过jq选取表单元素之后,获取dom元素,然后使用dom的reset()方法置空表单。
    $('#表单id/选取表单')[0].reset(); jq对象 -> dom对象 -> 使用reset()方法

61.jq选择一组class可以直接绑定一组元素的事件

$('.delete-btn').click(function() {
    $('#delete-modal').modal('show');
})

62.ajax删除确认需要设置全局变量

因为删除到确认中间分步骤,需要通过全局变量来保证最终删除的可以获取到选择到的那一个元素。

63. ajax的get请求传递方式

  • 一种是直接拼接
$.ajax({
    url :'login/order/delete/'+nid+'/',  //用于后台是通过
     type : 'GET',
     ..
})

用于django后端是通过get请求直接处理参数的视图函数,例如:

#urls.py
    path('login/order/delete/<int:id>',views.order_delete,name ='order_delete'), #删除订单

#views.py视图函数
def order_delete(request,id):
    Orderform.objects.filter(id = id).delete()
    return redirect('/login/order/')
  • 另一种使通过data参数,让ajax帮助拼接url:
$.ajax({
        url :'login/order/delete/', 
        type : 'GET',
        data:{
            id:nid,
        },
       ...    // => 最终的url : login/order/delete/?id="nid的值"
})

这样django就可以通过get获得url中的参数

def order_delete(request):
    id = request.GET.get('id')  #需要和传回的key相同
    Orderform.objects.filter(id = id).delete()
    return redirect('/login/order/')

63.对于forms或者modelform来说获取cleaned_data

实际上两者从前端的request中获取方式是通过input框的name属性,之所以直接通过获取定义好的字段,是因为在模板中渲染的时候生成的input框自带一个和字段一样的name属性。所以如果打算不使用模板生成前端表单,那么获取表单的post请求的关键字,就是通过其中的input的name属性(是键值对类型的),这个也包括验证表单中的cleaned_data。

64. django项目部署

https://www.zhihu.com/question/348410145

https://pythondjango.cn/django/advanced/16-docker-deployment/

第二个

看到5-6 暂且把项目做完部署!

项目做完啦~ 2023/07/05~ 继续补充一捏捏

65. 过滤敏感信息

b站 - 8.06 32:00