第60天:django学习(十)

news2024/11/26 16:39:30

choices参数的使用

        choices参数应用场景:

学历:小学 初中 高中 本科 硕士 博士 客户来源:微信渠道 广告 介绍 QQ 性别:男 女  未知

        对于以上可能被我们列举完的字段我们一般都是选择使用choices参来做

        建表

class UserInfo(models.Model):
    username = models.CharField(max_length=64)
    password = models.CharField(max_length=32)
​
    gender_choices = (
        (1, '男'),
        (2, '女'),
        (3, '未知'),
    )
​
    gender = models.SmallIntegerField(choices=gender_choices)
​
    score_choices=(
        ('A', '优秀'),
        ('B', '良好'),
        ('C', '及格'),
        ('D', '不及格'),
    )
​
    score = models.CharField(choices=score_choices,max_length=32, null=True)
    
    res=models.UserInfo.objects.filter(pk=4).first()
    print(res.gender)
    print(res.get_score_display())

MVC和MVT模式

MVC

        什么是MVC?

        MVC就是把Web应用分为模型(M),控制器(C)和视图(V)三层,他们之间以一种插件式的、松耦合的方式连接在一起,模型负责业务对象与数据库的映射(ORM),视图负责与用户的交互(页面),控制器接受用户的输入调用模型和视图完成用户的请求

        其示意图如下所示:

MVT

        Django的MTV模式本质上和MVC是一样的,也是为了各组件间保持松耦合关系,只是定义上有些许不同,Django的MTV分别是指:

M 代表模型(Model): 负责业务对象和数据库的关系映射(ORM)。

T 代表模板 (Template):负责如何把页面展示给用户(html)。

V 代表视图(View): 负责业务逻辑,并在适当时候调用Model和Template。

        除了以上三层之外,还需要一个URL分发器,它的作用是将一个个URL的页面请求分发给不同的View处理,View再调用相应的Model和Template,MTV的响应模式如下所示:

多对多的三种创建方式

        方式一:通过ManyToManyField自动创建第三张表

class Book(models.Model):
    title = models.CharField(max_length=32, verbose_name="书名")
    
class Author(models.Model):
    name = models.CharField(max_length=32, verbose_name="作者姓名")
    books = models.ManyToManyField(to="Book", related_name="authors")

        这是通过ORM自带的ManyToManyField自动创建第三张表

        全自动创建的优缺点

        优势:就是自动帮我们创建表
        缺点:就是扩展性非常差

        方式二:自行创建第三张表

class Book(models.Model):
    title = models.CharField(max_length=32, verbose_name="书名")
​
​
class Author(models.Model):
    name = models.CharField(max_length=32, verbose_name="作者姓名")
​
​
class Author2Book(models.Model):
    author = models.ForeignKey(to="Author")
    book = models.ForeignKey(to="Book")
    register_time=''

        这是自己创建第三张表,分别通过外键关联书和作者

        全手动创建的优缺点

        优势:可扩展性很高

        缺点:不能使用orm查询方法了

        方式三:设置ManyTomanyField并指定自行创建的第三张表

class Book(models.Model):
    title = models.CharField(max_length=32, verbose_name="书名")
​
​
class Author(models.Model):
    name = models.CharField(max_length=32, verbose_name="作者姓名")
    books = models.ManyToManyField(to="Book", through="Author2Book", through_fields=("author", "book"))
    
​
class Author2Book(models.Model):
    author = models.ForeignKey(to="Author")
    book = models.ForeignKey(to="Book")

        这是自己创建第三张表,并通过ManyToManyField指定关联

        全自动创建的优缺点

        优点:还可以使用orm的方法及正反向查询

        缺点:不能使用add set remove clear方法了

AJax技术

        什么是ajax?

        ajax就是一种前端技术,用于朝着后端程序发送请求和数据

        前端向后端发送请求的方式:

        1、浏览器地址栏输入url地址 请求方式默认并且只能是:get请求 ​

        2、a标签 请求方式默认并且只能是:get请求 ​

        3、form表单 请求方式可以是:get与post请求    

        4、ajax技术 请求方式可以是:get与post请求

        AJAX的特点:

        1. 异步提交

        2. 局部刷新

AJax案例

        前端页面中

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style></style>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
    <link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
    <script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>
<body>
<script>
    $(".btn").click(function () {
        var inp1 = $("#inp1").val();
        var inp2 = $("#inp2").val();
        $.ajax({
            url:'',
            type:'post',
            dataType:'json',
            data:{inp1:inp1, inp2:inp2},
            success:function (res) {
                console.log(res,)
                console.log(typeof res)
                console.log(res.username)
                console.log(res.password)
            }
        })
    })
</script>
</body>
</html>

        视图函数中

def ab_ajax(request):
    if request.method=='POST':
        print(request.POST)
        import json
        user_dict = {"username":"kevin", "password":123}
        return HttpResponse(json.dumps(user_dict))
    return render(request, 'ab_ajax.html')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1291932.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DBeaver 如何在没有外网的情况下连接数据库(下载驱动)

1.选择自己要连接的数据库 2.编辑驱动 3.选择你自己通过maven或者别的渠道下载的对应数据库的jar

深入探索Python delattr函数的威力与灵活性

引言&#xff1a; 在Python中&#xff0c;delattr函数是一个非常强大且灵活的工具&#xff0c;它允许我们删除对象的属性。使用delattr函数&#xff0c;我们可以动态地删除对象的属性&#xff0c;从而在编程中实现更灵活的操作。本文将详细介绍delattr函数的用法&#xff0c;帮…

数据结构与算法(五)回溯算法(Java)

目录 一、简介1.1 定义1.2 特性1.3 结点知识补充1.4 剪枝函数1.5 使用场景1.6 解空间1.7 实现模板 二、经典示例2.1 0-1 背包问题2.2 N皇后问题 一、简介 1.1 定义 回溯法&#xff08;back tracking&#xff09;是一种选优搜索法&#xff0c;又称为试探法&#xff0c;按选优条…

NVRAM相关

1. Modem NVRAM四个分区 nvdata&#xff1a;手机运行过程中&#xff0c;使用(读写)的NVRAM(除了存在protect_f和protect_s中的NVRAM)都是该分区的nvram文件。存储着普通NVRAM数据、 IMEI、barcode、Calibration数据等。对应的modem path是Z:\NVRAM。NVRAM目录下有CALIBRAT、NVD…

用序列化思想为自动化测试「提供动力」

Python 对象序列化技术 对象序列化是指将对象从内存转换为字节流的过程&#xff0c;以实现对象的持久化存储和网络传输。它在许多场景中都非常重要&#xff0c;比如远程调用、长期数据存储等。 在Python中&#xff0c;我们主要使用pickle和marshal这两个模块来实现对象的序列…

【银行测试】第三方支付平台业务流,功能/性能/安全测试方法...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、第三方支付平台…

vue+echarts实现桑吉图的效果

前言&#xff1a; 在我们项目使用图形的情况下&#xff0c;桑吉图算是冷门的图形了&#xff0c;但是它可以实现我们对多级数据之间数据流向更好的展示的需求&#xff0c;比如&#xff0c;我们实际数据流向中&#xff0c;具有1对多&#xff0c;多对多的情况下&#xff0c;如果用…

2023年淘宝天猫年终惊喜红包玩法

2023年淘宝天猫年终惊喜红包玩法&#xff0c;2023年淘宝年终好价节红包活动 随着2023年的尾声渐近&#xff0c;淘宝再次为广大用户带来了年终的惊喜——一场特别的红包活动。从12月8日零时开始&#xff0c;直至12月12日的午夜&#xff0c;淘宝app将开启一个为期五天的年终好价节…

Web前端工程的装机必备软件

前言 最近作者的电脑 C 盘变红了&#xff0c;这让我很难受(有点小强迫症)&#xff0c;所以准备重新安装下系统&#xff0c;顺便把 C 盘扩大点。 注意&#xff1a; 操作系统是 windows 11 23H2。 所有的命令行都是使用 Windows Terminal 中进行的。 安装 Windows Terminal 由于…

L1-026:I Love GPLT

题目描述 这道超级简单的题目没有任何输入。 你只需要把这句很重要的话 —— “I Love GPLT”——竖着输出就可以了。 所谓“竖着输出”&#xff0c;是指每个字符占一行&#xff08;包括空格&#xff09;&#xff0c;即每行只能有1个字符和回车。 输入样例&#xff1a; 无输出样…

arm 交叉编译器版本下载

网址&#xff1a;https://releases.linaro.org/components/toolchain/binaries/ 根据板子架构选择正确的编译器 根据你主机架构选择对应的版本&#xff08;就是你的开发电脑架构&#xff09;

ROS小练习——服务调用

目录 一、服务名称与消息的获取 二、代码案例 1、C 2、python 三、编译运行 1、配置cmakelist 2、运行 一、服务名称与消息的获取 rosservice list rosservice type /spawn rossrv info turtlesim/Spawn 二、代码案例 1、C //包含头文件 #include "ros/ros.h&qu…

Linux AMH服务器管理面板本地安装与远程访问

最近&#xff0c;我发现了一个超级强大的人工智能学习网站。它以通俗易懂的方式呈现复杂的概念&#xff0c;而且内容风趣幽默。我觉得它对大家可能会有所帮助&#xff0c;所以我在此分享。点击这里跳转到网站。 文章目录 1. Linux 安装AMH 面板2. 本地访问AMH 面板3. Linux安装…

MySQL和MongoDB简介以及它们之间的区别

本文主要介绍MySQL和MongoDB的简介以及它们之间的区别。 目录 MySQL简介MySQL的优缺点MySQL的应用场景MongoDB简介MongoDB的优缺点MongoDB的应用场景MySQL和MongoDB的区别 MySQL简介 MySQL是一种开源的关系型数据库管理系统&#xff0c;是世界上最流行的数据库之一。它支持多用…

UVM:UVM的树形结构

UVM采用树形的组织结构来管理验证平台的各个部分。sequencer、driver、monitor、agent、model、 scoreboard、env等都是树的一个结点。为什么要用树的形式来组织呢&#xff1f;因为作为一个验证平台&#xff0c;它必须能够掌握自己治下的所 有“人口”&#xff0c;只有这样做了…

温度而知新,一文读懂Java知识文集精华版。

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…

SL1581降压恒压 耐压4V-30V降压5V 2A电流 外围简单,四个元器件

SL1581是一款专为降压恒压应用而设计的芯片&#xff0c;具有耐压4V-30V、降压5V、2A电流输出等特点&#xff0c;外围电路简单&#xff0c;仅需四个元器件。 一、芯片介绍 SL1581是一款专为降压恒压应用而设计的芯片&#xff0c;它采用先进的PWM控制技术&#xff0c;具有高效率、…

Google 发布最强大模型Gemini,能力与GPT-4相当

一、Gemini 介绍 Gemini 是一个多模式模型系列&#xff0c;在图像、音频、视频和文本领域展示了真正强大的功能。其中功能最强大的模型 Gemini Ultra 在 32 个基准测试中的 30 个中提升了最先进水平&#xff0c;其中包括 12 个流行文本和推理基准测试中的 10 个、9 个图像理解…

情感分析简化:使用python中的TextBlob库轻松分析文本情感

导语&#xff1a;在当今社交媒体和大数据时代&#xff0c;了解人们对于产品、服务或事件的情感倾向变得至关重要。TextBlob库作为一个简单易用的自然语言处理工具&#xff0c;提供了强大的情感分析功能&#xff0c;帮助我们更深入地理解文本背后的情感。本文将介绍TextBlob库的…

Python3+RIDE+RobotFramework自动化测试框架搭建过程详解

一、Python安装 最新版Python下载地址&#xff1a;https://www.python.org/ 根据操作系统选择对应版本制品下载安装即可&#xff0c;本机用的是Windows x86-64 executable installer。 注意事项&#xff1a; 安装完成后检查下环境变量&#xff0c;默认会配置好&#xff0c;可…