zoukankan      html  css  js  c++  java
  • django ajax 及批量插入数据 分页器

    ```
    Ajax
    前端朝后端发送请求都有哪些方式
        a标签href                GET请求
        浏览器输入url            GET请求
        form表单                GET/POST请求
        Ajax                    GET/POST请求
        
    前端朝后端发送数据的编码格式
        contentType参数,用来表示前端朝后端发送数据的编码格式
            urlencoded:name=jason&pwd=123  request.POST  # urlencoded是form表单和ajax提交数据默认的编码方式
            formdata:request.FILES
            appliction/json:request.body   bytes格式
    
    ajax特点:
        1.异步提交
        2.局部刷新
        
    ajax与form表单的不同点:
        1.form表单提交的数据格式只能是urlencoded和formdata,它不支持json格式数据
        2.form表单提交数据,页面会刷新
        3.ajax局部刷新,异步提交,并且支持发送json格式数据
    ```
    
    ​    
    
    ```
    小需求:页面上渲染三个input前两个输入数字,点击计算按钮,第三个得出两者之和
    前端代码:
        <input type='text' id='i1'/> + <input type='text' id='i2'/> = <input type='text' id='i3'/>
        <button id='b1'></button>
        # ajax初识
            $('#b1').click(function () {
                    $.ajax({
                        url:'',
                        type:'POST',
                        data:{i1:$('#i1').val(),i2:$('#i2').val()},
                        success:function (data) {
                            $('#i3').val(data)
                        }
                    })
                })
    
    ajax提交数据必备的几个参数
        1.往哪提交        ulr控制
        2.提交方式        type控制
        3.提交的数据    data
        4.提交后端处理之后的结果    success:function(){}
        
         $.ajax({
            // 前面的变量值都是固定写法,url,type,data
            url:'',  // 提交的路径
            type:'post',  // 提交的方式
            data:{'name':'jason'},  // 提交的数据  # 默认数据传输默认也是urlencoded编码格式
            success:function (data) {  // 回调函数,会将后端处理好的数据传给data形参
                alert(data)
            }
        })
    
    ajax提交json格式数据
        1.需要告诉后端此次发送的数据为json格式
        2.告诉后端数据时什么格式,你在传的时候,数据就应该对应是什么格式
    $('#d1').click(function () {
        $.ajax({
            // 前面的变量值都是固定写法,url,type,data
            url:'',  // 提交的路径
            type:'post',  // 提交的方式
            data:JSON.stringify({'name':'jason','age':'18'}),  // 提交的数据
            contentType:'application/json',  // 告诉后端当前数据的格式为json格式  # 编码格式与数据类型必须一致,不能骗人!
            success:function (data) {  // 回调函数,会将后端处理好的数据传给data形参
                $('#i3').val(data)
            }
        })
    })
    ```
    
    ​    
    ​    
    
    ```
    request.POST只能解析 编码格式为urlencoded以及text/plain
    ```
    
    ​    
    
    ```
    ajax传文件(固定写法!)
    
    几个必须注意点:
        1.必须用内置对象:new FormData
        2.获取input框文件对象:$('#i1')[0].files[0]
        3.指定两个参数为false:
            processData:false,  // 不要处理我的数据 name=jason&password=123
            contentType:false,  // 不需要指定任何编码,就按照我的formdata内部的数据格式即可
        4.后端按正常的文件上传从request.FILES里面获取文件对象
        5.formdata也支持传普通的键值对,后端仍然可以在request.POST里面获取到
        
        $("#btn").click(function () {
                //上传文件,必须用FormData,生产一个formdata对象
                var formdata=new FormData();
                formdata.append('name',$("#name").val()); # 也支持传键值对的数据
                //取出文件$("#myfile")[0].files拿到的是文件列表,取第0个把具体的文件取出来
                formdata.append('myfile',$("#myfile")[0].files[0]);
                $.ajax({
                    url:'/index/',
                    type:'post',
                    //不预处理数据,(name=lqz&age=18)
                    processData:false,
                    //指定往后台传数据的编码格式(urlencoded,formdata,json)
                    //现在用formdata对象处理了,就不需要指定编码格式了,不要给我编码了
                    contentType:false,
                    data:formdata,
                    success:function (data) {
                        alert(data)
                    }
                })
    
    后端
        def plus(request):
        if request.method == 'POST':
            print(request.FILES)
            file_obj = request.FILES.get('myfile')
            with open(file_obj.name,'wb') as f:
                for line in file_obj:
                    f.write(line)
            return HttpResponse('ok')
        return render(request,'index.html')
    ```
    
    ​    
    
    ```
    批量插入数据
        # 批量插入数据
        l = []
        for i in range(1000):
            l.append(models.Book(name='第%s本书'%i))
        models.Book.objects.bulk_create(l)
    
    分页器
        页数通常都取奇数页,为的是符合中国人的审美标准(对称美)
    自定义分页器使用
        后端:
            # 固定用法 获取用户想访问的当前页
            page = request.GET.get('page',1)
            # 实例化分页器对象
            page_obj = Pagination(current_page=page,all_count=book_queryset.count())
            # 对总数据对象进行切片
            page_queryset = book_queryset[page_obj.start:page_obj.end]
        前端:
            {{ page_obj.page_html|safe }}
    不需要自己写,拷贝过去直接即可,
    只需要你知道使用方法即可.内部逻辑感兴趣的可以去研究一下
    ```
    
    ​    
    ​    
    ​    
    ​    
    ​    
    ​    
    
    ```
    django settings配置文件
        由来:为什么我在用django配置的时候导入的不是我项目名下的那个settings
        但是我配置了之后依然能够起作用,这是为什么?
        from django.conf import settings  # 入口
        
        settings = LazySettings()  # 单例
        
        from django.conf import global_settings
        class LazySettings(LazyObject):  
                def _setup(self, name=None):
                    settings_module = os.environ.get(ENVIRONMENT_VARIABLE)  # 获取全局的键值对,在manage.py中启动时就已经设置了一个
                    self._wrapped = Settings(settings_module)
        
        class Settings(object):
            def __init__(self, settings_module):
                for setting in dir(global_settings):  # 先获取系统默认配置里面的所有的变量名
                    if setting.isupper():
                        setattr(self, setting, getattr(global_settings, setting))  # 给settings对象设置键值对
                self.SETTINGS_MODULE = settings_module
                mod = importlib.import_module(self.SETTINGS_MODULE)
                
                for setting in dir(mod):
                    if setting.isupper():
                        setting_value = getattr(mod, setting)
                        setattr(self, setting, setting_value)  # 给settings对象设置键值对
    ```
  • 相关阅读:
    php 中的 Output Control 函数
    web安全知识
    php写一个web五子棋
    实现一个web服务器, 支持php
    字节序
    TinyHTTPd源码分析
    linux 管道通信
    linux网络编程
    微信公众号开发-静默授权实现消息推送(微服务方式)
    初学 Nginx
  • 原文地址:https://www.cnblogs.com/tangda/p/10754050.html
Copyright © 2011-2022 走看看