美文网首页
python Django(入门3)

python Django(入门3)

作者: g_ices | 来源:发表于2020-05-19 08:32 被阅读0次

一 : 科普一分钟

Ajax 不是一种新的编程语言,而是一种用于创建更好更快以及交互性更强的Web应用程序的技术,用于web端的异步请求.
对于多表的ORM 该如何创建,删除,关联它们之间的关系,Django为我们提供了很多方法,让我们来揭开神秘的面纱吧.

image

二 : ORM获取对象模式

  • 内部元素是对象 stu是一个 对像列表[obj1,obj2]
stu = models.Student.objects.all()

  • 内部元素都是字典 stu是一个字典列表 [ {'name':'tz','age':'26'} ]
stu  = models.Student.objects.all().values('name','age')

  • 内部元素都是元组 stu是一个元祖列表 [(雪芙,24),(容姿,23)]
stu = models.Business.Student.all().values_list('name','age')

三 : Ajax

Asynchronous Javascript And XML - > 异步 JavaScript 和 XML
通常用于web端与服务端的交互,可以直接在前台页面 JavaScript 调用后台页面的方法.
我们对某个标签进行绑定,然后进行Ajax请求, 可以看代码感觉一下 很像移动端安卓的Volley或者iOS的AFN网络请求框架.拿到后台返回的数据进行页面操作.

  • 页面进行JS操作
$('#TZajax').click(function(){
                $.ajax({
                    url: "/myajax",
                    type: 'POST',
                    //data: {'hostname': $('#host').val(), 'ip': $('#ip').val(), 'port': $('#port').val(), 'b_id': $('#sel').val()},
        #可以直接拿到表单对应的数据进行请求
                    data: $('#add_form').serialize(),
                    success: function(data){
                      #解码成json格式
                        var obj = JSON.parse(data);
                        if(obj.status){
                            #True 重新刷新页面
                            location.reload();
                        }else{
                            #弹出错误信息
                            $('#erro_msg').text(obj.error);
                        }
                    }
                })
            });

  • 服务端进行处理操作
def myajax(request):
    ret = {'status': True, 'error': None, 'data': 'hahaha'}
    try:
        h = request.POST.get('hostname')
        i = request.POST.get('ip')
        p = request.POST.get('port')
        b = request.POST.get('b_id')
        if h and len(h) > 5:
            models.Host.objects.create(hostname=h,
                                           ip=i,
                                           port=p,
                                           b_id=b)
        else:
            ret['status'] = False
            ret['error'] = "请求参数错误"
    except Exception as e:
        ret['status'] = False
        ret['error'] = '请求错误'
    return HttpResponse(json.dumps(ret))

四 : 多对多表操作

在A 表中的一行可以匹配 B 表中的多行,反之亦然。要创建这种关系,需要定义第三个表,称为[结合表],它的主键由 A 表和 B 表的外部键组成。例如,authorstitles 表具有多对多关系,这是由于这些表都与 titleauthors 表具有一对多关系。titleauthors 表的主键是 au_id 列(authors 表的主键)和 title_id 列(titles 表的主键)的组合。

  • 关系图

    image
  • 自定义关系表

#表一
class Student(models.Model):
                nid = models.AutoField(primary_key=True)
                studentname = models.CharField(max_length=32,db_index=True)

#表二
class Course(models.Model):
                name = models.CharField(max_length=32)

#关系表
class StudentAndCourse(models.Model):
                hobj = models.ForeignKey(to='Student',to_field='nid')
                aobj = models.ForeignKey(to='Course',to_field='id')

  • 自动创建关系表
方式二:自动创建关系表

#表一
class Student(models.Model):
                nid = models.AutoField(primary_key=True)
                studentname = models.CharField(max_length=32,db_index=True)

#表二     
  class Course(models.Model):
                name = models.CharField(max_length=32)
                r = models.ManyToManyField("Student")
    #########           
            无法直接对第三张表进行操作,通过r 对关系表进行操作

            obj = Course.objects.get(id=1)
            obj.name

            # 第三张表操作 对id为1 的添加学生关系 
            obj.r.add(1)
            obj.r.add(2)
            obj.r.add(2,3,4)
                      #添加一组列表
            obj.r.add(*[1,2,3,4])

                        #移除关系
            obj.r.remove(1)
            obj.r.remove(2,4)
                      #移除一组关系
            obj.r.remove(*[1,2,3])

                    #清除所有关系
            obj.r.clear()

                  #重置关系
            obj.r.set([3,5,7])

            # 获取所有相关的对象“列表” QuerySet
            obj.r.all()

五 : 总结

我们可以给Ajax返回json接口, 应用于web端,也就是说,对于移动端,我们也可以用同样的方法写一个后台接口,让移动端调用,并且返回相应的数据.有移动端基础的同学,也可以尝试一下自己做一个接口,并且测试一下返回数据,多多尝试,下期再见.

相关文章

网友评论

      本文标题:python Django(入门3)

      本文链接:https://www.haomeiwen.com/subject/ygkvohtx.html