Django笔记(五):模型models

这篇具有很好参考价值的文章主要介绍了Django笔记(五):模型models。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Django中的模型对应数据库中的一张表格。

定义模型

player.py

from django.db import models

class Player(models.Model):
    idx = models.IntegerField(unique=True)

    def __str__(self):
        return str(self.id)

每个模型需要继承models类,如上Player模型定义了一个整形字段idx。常见字段类型有:

字段

描述
IntegerField 整形
FloatField 浮点型
CharField 字符串类型

TextField

长文本类型
BooleanField 布尔类型

每个字段可定义参数:

参数 取值 描述
null True/False 是否为空
unique True/False 字段是否唯一
default auto 字段默认值
max_length int 字段最大长度
primary_key True/False 是否为主键

迁移数据

定义好模型后,需要进行迁移才能在数据库中看到表格:

python manage.py makemigrations // 生成迁移文件
python manage.py migrate // 执行迁移

后台管理

Django自带一个后台,访问localhost/admin/可以看到,如果想让自己创建的表格能够在后台可视化,需要将表格进行注册。在models所属app目录下编辑admin.py:

from django.contrib import admin
from app1.models.player import Player # 引入模型

# Register your models here.

admin.site.register(Player) # 注册模型

迁移后需要重启服务器,admin后台才能看到更新之后的自定义表格。

数据库操作

Django定义了一系列API对数据库执行操作,无需关注不同数据库间sql语句的差别,例如查询Player的所有记录:

from django.http import HttpResponse
from app1.models.player import Player

def GetPlayersView(request):
    player = Player.objects.all()
    for p in player:
        print(p.idx)
    return HttpResponse("")

常用查询操作如下:

方法 描述 返回
all 查询所有 查询集(可当做列表)
filter 多条查询 列表
get 单条查询 一条数据,查询失败报错
count 查询结果数 整数

一般查询不确定结果使用filter,如查询一个idx为10010的用户,可以使用

player = Player.objects.filter(idx=10010)
if player:
    print(player[0].idx)
else:
    print("no result")

这样可以避免get方法查询为空时的报错。

Player.objects.create(idx=1)

players = Player.objects.filter(status=123)
for player in players:
    player.delete()

# 单条修改
player = Player.objects.get(id=1)
player.status = 123
player.save()

# 批量修改
players = Player.objects.filter(id=1).update(status=123)

User模型

Django自带User模型,内置用户认证体系,开箱即用。

User模型常用字段:

字段 类型 描述
id int 主键,用户编号
username varchar 用户名
password varchar 密码
is_active tinyint 用户状态,为0则封号

常用操作:

from django.contrib.auth.models import User

# 创建user
User.objects.create_user(username="", password="")

# 修改密码
user = User.objects.get(id=1)
user.set_password(passwd)
user.save()

# 验证密码
user.check_password(passwd)

Auth模块

常见方法:

方法 描述
authenticate(username, password) 用户验证
login(HttpRequest, user) 登录
logout(request) 登出,注销会话
is_authenticated() 用户登录状态

用户登录视图:

from django.http import JsonResponse
from django.contrib.auth import authenticate, login

def signin(request):
    data = request.POST
    username = data.get("username")
    password = data.get("password")
    user = authenticate(username=username, password=password) # 验证用户
    if not user:
        return JsonResponse({
            "result": "用户名或密码错误"
        })
    if user.is_authenticated():
        return JsonResponse({
            "result": "用户已登录"
        })
    if user.is_authenticated():
        return JsonResponse({
            "result": "用户已登录"
        })
    if not user.is_active:
        return JsonResponse({
            "result": "账号被封"
        })
    # 登录用户
    login(request, user)
    return JsonResponse({
        "result": "success"
    })

扩展用户

Django自带的User未必能够满足我们所有的需求,故其提供了扩展User的方式,而个人更喜欢偷个懒,例如文章开头的Player想对User扩展,我会这样写:

from django.db import models
from django.contrib.auth.models import User

class Player(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    ...

    def __str__(self):
        return str(self.user)

将User和Player俩个表做个关联,让user成为Player的一个字段来使用。

(模型的关系除了一对一OneToOneField,还有一对多ForeignKey和多对多ManyToManyField,on_delete的参数CASCADE表级联删除,还有PROTECT和DO_NOTHING等对扩展表的操作)文章来源地址https://www.toymoban.com/news/detail-814268.html

到了这里,关于Django笔记(五):模型models的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Django搭建图书管理系统03:编写博客文章的Model模型

    Django 框架主要关注的是模型(Model)、模板(Template)和视图(Views),称为MTV模式。 它们各自的职责如下: 层次 职责 模型(Model),即数据存取层 处理与数据相关的所有事务: 如何存取、如何验证有效性、包含哪些行为以及数据之间的关系等。 模板(Template),即业务逻

    2024年02月12日
    浏览(42)
  • Django笔记四十二之model使用validator验证器

    本文首发于公众号:Hunter后端 原文链接:Django笔记四十二之model使用validator验证器 这一篇笔记介绍一下 model 里的 validator 验证器。 首先,这是个什么东西呢? 在 model 的第四篇笔记里,我们介绍了字段的一些属性,比如是否允许为空,varchar 类型的字段的最大长度等。 一般在

    2024年02月05日
    浏览(52)
  • python获取类名__qualname__,解决django接口ObjectDoesNotExist异常寻找model的问题

    在django项目中,经常使用类似Model.objects.get(id=1)的方法取对象,默认抛出的异常是ObjectDoesNotExist类型,通过try catch可以把异常捕获,获取的异常是Model.DoesNotExist类型, 要获知其类名,可以使用__name__方法 要获知其完整类名,可以使用__qualname__方法 还想要获取定义类的路径,可

    2024年02月14日
    浏览(35)
  • Django笔记四十之运行Django环境的python脚本

    本文首发于公众号:Hunter后端 原文链接:Django笔记四十之运行Django环境的python脚本 这一篇笔记介绍如何在 Django 中运行脚本。 假设说我们要实现一个功能,需要获取 blog.models.Blog 这张表里的总数且使用 print() 输出。 如果代码逻辑很短,且是一次性执行的操作,我们可以在系

    2024年02月04日
    浏览(45)
  • Python Django 模型概述与应用

    今天来为大家介绍 Django 框架的模型部分,模型是真实数据的简单明确的描述,它包含了储存的数据所必要的字段和行为,Django 遵循 DRY Principle 。它的目标是你只需要定义数据模型,然后其它的杂七杂八代码你都不用关心,它们会自动从模型生成。 Django 中模型是真实数据的

    2024年02月12日
    浏览(30)
  • 基于Django的Python应用——学习笔记

    环境:Python3.11           Django5.0.1 为项目新建一个目录,将其命名为 learning_log ,再在终端中切换到这个目录,并创建一个虚拟环境。 项目列表生成了这样的一个文件夹 控制台前方出现高亮即为成功 在依然处于活动的虚拟环境的情况下( ll_env 包含在括号内),执行如下命

    2024年02月21日
    浏览(75)
  • Django的models和models.Model有何区别?

    在Django中,models是一个模块,它包含了定义数据库模型所需的各种字段和其他相关类。models.Model是Django中定义模型的基类,所有的模型类都应该继承自它。 示例如下: 在上面的代码中,首先是通过语句 from django.db import models 导入了models模块,然后在创建类UserBaseInfo的时候设

    2024年02月11日
    浏览(35)
  • django自动创建model数据

    目前使用的环境:django4.2.3,python3.10 django通过一些第三方库,可以轻易的自动生成一系列的后台数据。 首先先创建一个数据库: 然后,在setting.py中就可以指定我们新创建的数据库了。  然后,需要执行数据迁移命令: 最好在虚拟环境中执行这些内容,会比较方便: 然后,

    2024年02月11日
    浏览(34)
  • Django的django.contrib.auth.models模块中的AbstractUser类介绍。

    在Django框架中, django.contrib.auth.models 模块提供了用于身份验证和授权的相关功能。其中, AbstractUser 类是Django默认的用户模型(user model)的抽象基类。 AbstractUser 类提供了一些常见的用户相关字段和方法的默认实现,它可以作为创建自定义用户模型的基础。当你在Django项目中

    2024年02月13日
    浏览(42)
  • 基于Django的Python应用—学习笔记—功能完善

    创建基于表单的页面的方法几乎与前面创建网页一样:定义一个 URL ,编写一个视图函数并编写一个模板。一个主要差别是,需要导入包含表单 的模块forms.py 。 edit_entry.html new_entry.html new_topic.html

    2024年01月20日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包