base of proyect
This commit is contained in:
commit
80668b3ec8
|
@ -0,0 +1,2 @@
|
||||||
|
db.sqlite3
|
||||||
|
env/
|
|
@ -0,0 +1,3 @@
|
||||||
|
from django.contrib import admin
|
||||||
|
|
||||||
|
# Register your models here.
|
|
@ -0,0 +1,6 @@
|
||||||
|
from django.apps import AppConfig
|
||||||
|
|
||||||
|
|
||||||
|
class ActionConfig(AppConfig):
|
||||||
|
default_auto_field = "django.db.models.BigAutoField"
|
||||||
|
name = "action"
|
|
@ -0,0 +1,3 @@
|
||||||
|
from django.db import models
|
||||||
|
|
||||||
|
# Create your models here.
|
|
@ -0,0 +1,3 @@
|
||||||
|
from django.test import TestCase
|
||||||
|
|
||||||
|
# Create your tests here.
|
|
@ -0,0 +1 @@
|
||||||
|
from django.urls import path, include
|
|
@ -0,0 +1 @@
|
||||||
|
# from django.shortcuts import render
|
|
@ -0,0 +1,3 @@
|
||||||
|
from django.contrib import admin
|
||||||
|
|
||||||
|
# Register your models here.
|
|
@ -0,0 +1,6 @@
|
||||||
|
from django.apps import AppConfig
|
||||||
|
|
||||||
|
|
||||||
|
class DeviceConfig(AppConfig):
|
||||||
|
default_auto_field = "django.db.models.BigAutoField"
|
||||||
|
name = "device"
|
|
@ -0,0 +1,404 @@
|
||||||
|
# Generated by Django 5.0.6 on 2024-06-11 09:20
|
||||||
|
|
||||||
|
import django.db.models.deletion
|
||||||
|
from django.conf import settings
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
initial = True
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name="Device",
|
||||||
|
fields=[
|
||||||
|
(
|
||||||
|
"id",
|
||||||
|
models.BigAutoField(
|
||||||
|
auto_created=True,
|
||||||
|
primary_key=True,
|
||||||
|
serialize=False,
|
||||||
|
verbose_name="ID",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
("created", models.DateTimeField(auto_now_add=True)),
|
||||||
|
("updated", models.DateTimeField(auto_now=True)),
|
||||||
|
("type", models.CharField(max_length=32)),
|
||||||
|
("model", models.CharField(blank=True, max_length=64, null=True)),
|
||||||
|
(
|
||||||
|
"manufacturer",
|
||||||
|
models.CharField(blank=True, max_length=64, null=True),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"serial_number",
|
||||||
|
models.CharField(blank=True, max_length=64, null=True),
|
||||||
|
),
|
||||||
|
("part_number", models.CharField(blank=True, max_length=64, null=True)),
|
||||||
|
("brand", models.TextField(blank=True, null=True)),
|
||||||
|
("generation", models.SmallIntegerField(blank=True, null=True)),
|
||||||
|
("version", models.TextField(blank=True, null=True)),
|
||||||
|
("production_date", models.DateTimeField(blank=True, null=True)),
|
||||||
|
("variant", models.TextField(blank=True, null=True)),
|
||||||
|
("devicehub_id", models.TextField(blank=True, null=True, unique=True)),
|
||||||
|
("dhid_bk", models.CharField(blank=True, max_length=64, null=True)),
|
||||||
|
("phid_bk", models.CharField(blank=True, max_length=64, null=True)),
|
||||||
|
("family", models.CharField(blank=True, max_length=64, null=True)),
|
||||||
|
("hid", models.CharField(blank=True, max_length=64, null=True)),
|
||||||
|
("chid", models.CharField(blank=True, max_length=64, null=True)),
|
||||||
|
("active", models.BooleanField(default=True)),
|
||||||
|
(
|
||||||
|
"owner",
|
||||||
|
models.ForeignKey(
|
||||||
|
on_delete=django.db.models.deletion.CASCADE,
|
||||||
|
to=settings.AUTH_USER_MODEL,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name="Component",
|
||||||
|
fields=[
|
||||||
|
(
|
||||||
|
"device",
|
||||||
|
models.OneToOneField(
|
||||||
|
on_delete=django.db.models.deletion.CASCADE,
|
||||||
|
primary_key=True,
|
||||||
|
serialize=False,
|
||||||
|
to="device.device",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"type",
|
||||||
|
models.CharField(
|
||||||
|
choices=[
|
||||||
|
("GraphicCard", "Graphiccard"),
|
||||||
|
("DataStorage", "Datastorage"),
|
||||||
|
("Motherboard", "Motherboard"),
|
||||||
|
("NetworkAdapter", "Networkadapter"),
|
||||||
|
("Processor", "Processor"),
|
||||||
|
("RamModule", "Rammodule"),
|
||||||
|
("SoundCard", "Soundcard"),
|
||||||
|
("Display", "Display"),
|
||||||
|
("Battery", "Battery"),
|
||||||
|
("Camera", "Camera"),
|
||||||
|
],
|
||||||
|
max_length=32,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name="Computer",
|
||||||
|
fields=[
|
||||||
|
(
|
||||||
|
"device",
|
||||||
|
models.OneToOneField(
|
||||||
|
on_delete=django.db.models.deletion.CASCADE,
|
||||||
|
primary_key=True,
|
||||||
|
serialize=False,
|
||||||
|
to="device.device",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
("chassis", models.TextField(blank=True, null=True)),
|
||||||
|
("system_uuid", models.UUIDField()),
|
||||||
|
("sku", models.TextField(blank=True, null=True)),
|
||||||
|
(
|
||||||
|
"type",
|
||||||
|
models.CharField(
|
||||||
|
choices=[
|
||||||
|
("Desktop", "Desktop"),
|
||||||
|
("Laptop", "Laptop"),
|
||||||
|
("Server", "Server"),
|
||||||
|
],
|
||||||
|
default="Laptop",
|
||||||
|
max_length=32,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name="PhysicalProperties",
|
||||||
|
fields=[
|
||||||
|
(
|
||||||
|
"device",
|
||||||
|
models.OneToOneField(
|
||||||
|
on_delete=django.db.models.deletion.CASCADE,
|
||||||
|
primary_key=True,
|
||||||
|
serialize=False,
|
||||||
|
to="device.device",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
("weight", models.FloatField(blank=True, null=True)),
|
||||||
|
("width", models.FloatField(blank=True, null=True)),
|
||||||
|
("height", models.FloatField(blank=True, null=True)),
|
||||||
|
("depth", models.FloatField(blank=True, null=True)),
|
||||||
|
("color", models.CharField(blank=True, max_length=20, null=True)),
|
||||||
|
("image", models.CharField(blank=True, max_length=64, null=True)),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name="SoundCard",
|
||||||
|
fields=[
|
||||||
|
(
|
||||||
|
"id",
|
||||||
|
models.BigAutoField(
|
||||||
|
auto_created=True,
|
||||||
|
primary_key=True,
|
||||||
|
serialize=False,
|
||||||
|
verbose_name="ID",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"component",
|
||||||
|
models.OneToOneField(
|
||||||
|
on_delete=django.db.models.deletion.CASCADE,
|
||||||
|
to="device.component",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name="RamModule",
|
||||||
|
fields=[
|
||||||
|
(
|
||||||
|
"id",
|
||||||
|
models.BigAutoField(
|
||||||
|
auto_created=True,
|
||||||
|
primary_key=True,
|
||||||
|
serialize=False,
|
||||||
|
verbose_name="ID",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
("size", models.IntegerField(blank=True, null=True)),
|
||||||
|
("speed", models.SmallIntegerField(blank=True, null=True)),
|
||||||
|
(
|
||||||
|
"interface",
|
||||||
|
models.CharField(
|
||||||
|
choices=[
|
||||||
|
("SDRAM", "Sdram"),
|
||||||
|
("DDR SDRAM", "Ddr"),
|
||||||
|
("DDR2 SDRAM", "Ddr2"),
|
||||||
|
("DDR3 SDRAM", "Ddr3"),
|
||||||
|
("DDR4 SDRAM", "Ddr4"),
|
||||||
|
("DDR5 SDRAM", "Ddr5"),
|
||||||
|
("DDR6 SDRAM", "Ddr6"),
|
||||||
|
("LPDDR3", "Lpddr3"),
|
||||||
|
],
|
||||||
|
max_length=32,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"format",
|
||||||
|
models.CharField(
|
||||||
|
choices=[("DIMM", "Dimm"), ("SODIMM", "Sodimm")], max_length=32
|
||||||
|
),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"component",
|
||||||
|
models.OneToOneField(
|
||||||
|
on_delete=django.db.models.deletion.CASCADE,
|
||||||
|
to="device.component",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name="Processor",
|
||||||
|
fields=[
|
||||||
|
(
|
||||||
|
"id",
|
||||||
|
models.BigAutoField(
|
||||||
|
auto_created=True,
|
||||||
|
primary_key=True,
|
||||||
|
serialize=False,
|
||||||
|
verbose_name="ID",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
("speed", models.FloatField(blank=True, null=True)),
|
||||||
|
("cores", models.SmallIntegerField(blank=True, null=True)),
|
||||||
|
("threads", models.SmallIntegerField(blank=True, null=True)),
|
||||||
|
("address", models.SmallIntegerField(blank=True, null=True)),
|
||||||
|
(
|
||||||
|
"component",
|
||||||
|
models.OneToOneField(
|
||||||
|
on_delete=django.db.models.deletion.CASCADE,
|
||||||
|
to="device.component",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name="NetworkAdapter",
|
||||||
|
fields=[
|
||||||
|
(
|
||||||
|
"id",
|
||||||
|
models.BigAutoField(
|
||||||
|
auto_created=True,
|
||||||
|
primary_key=True,
|
||||||
|
serialize=False,
|
||||||
|
verbose_name="ID",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
("speed", models.IntegerField(blank=True, null=True)),
|
||||||
|
("wireless", models.BooleanField(default=False)),
|
||||||
|
(
|
||||||
|
"component",
|
||||||
|
models.OneToOneField(
|
||||||
|
on_delete=django.db.models.deletion.CASCADE,
|
||||||
|
to="device.component",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name="Motherboard",
|
||||||
|
fields=[
|
||||||
|
(
|
||||||
|
"id",
|
||||||
|
models.BigAutoField(
|
||||||
|
auto_created=True,
|
||||||
|
primary_key=True,
|
||||||
|
serialize=False,
|
||||||
|
verbose_name="ID",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
("slots", models.SmallIntegerField(blank=True, null=True)),
|
||||||
|
("usb", models.SmallIntegerField(blank=True, null=True)),
|
||||||
|
("firewire", models.SmallIntegerField(blank=True, null=True)),
|
||||||
|
("serial", models.SmallIntegerField(blank=True, null=True)),
|
||||||
|
("pcmcia", models.SmallIntegerField(blank=True, null=True)),
|
||||||
|
("bios_date", models.DateTimeField()),
|
||||||
|
("ram_slots", models.SmallIntegerField(blank=True, null=True)),
|
||||||
|
("ram_max_size", models.IntegerField(blank=True, null=True)),
|
||||||
|
(
|
||||||
|
"component",
|
||||||
|
models.OneToOneField(
|
||||||
|
on_delete=django.db.models.deletion.CASCADE,
|
||||||
|
to="device.component",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name="GraphicCard",
|
||||||
|
fields=[
|
||||||
|
(
|
||||||
|
"id",
|
||||||
|
models.BigAutoField(
|
||||||
|
auto_created=True,
|
||||||
|
primary_key=True,
|
||||||
|
serialize=False,
|
||||||
|
verbose_name="ID",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
("memory", models.IntegerField(blank=True, null=True)),
|
||||||
|
(
|
||||||
|
"component",
|
||||||
|
models.OneToOneField(
|
||||||
|
on_delete=django.db.models.deletion.CASCADE,
|
||||||
|
to="device.component",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name="Display",
|
||||||
|
fields=[
|
||||||
|
(
|
||||||
|
"id",
|
||||||
|
models.BigAutoField(
|
||||||
|
auto_created=True,
|
||||||
|
primary_key=True,
|
||||||
|
serialize=False,
|
||||||
|
verbose_name="ID",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"component",
|
||||||
|
models.OneToOneField(
|
||||||
|
on_delete=django.db.models.deletion.CASCADE,
|
||||||
|
to="device.component",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name="DataStorage",
|
||||||
|
fields=[
|
||||||
|
(
|
||||||
|
"id",
|
||||||
|
models.BigAutoField(
|
||||||
|
auto_created=True,
|
||||||
|
primary_key=True,
|
||||||
|
serialize=False,
|
||||||
|
verbose_name="ID",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
("size", models.IntegerField(blank=True, null=True)),
|
||||||
|
(
|
||||||
|
"interface",
|
||||||
|
models.CharField(
|
||||||
|
choices=[
|
||||||
|
("ATA", "Ata"),
|
||||||
|
("USB", "Usb"),
|
||||||
|
("PCI", "Pci"),
|
||||||
|
("NVME", "Nvme"),
|
||||||
|
],
|
||||||
|
max_length=32,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"type",
|
||||||
|
models.CharField(
|
||||||
|
choices=[
|
||||||
|
("HardDrive", "Harddrive"),
|
||||||
|
("SolidStateDrive", "Solidstatedrive"),
|
||||||
|
],
|
||||||
|
max_length=32,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"component",
|
||||||
|
models.OneToOneField(
|
||||||
|
on_delete=django.db.models.deletion.CASCADE,
|
||||||
|
to="device.component",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name="Battery",
|
||||||
|
fields=[
|
||||||
|
(
|
||||||
|
"id",
|
||||||
|
models.BigAutoField(
|
||||||
|
auto_created=True,
|
||||||
|
primary_key=True,
|
||||||
|
serialize=False,
|
||||||
|
verbose_name="ID",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"component",
|
||||||
|
models.OneToOneField(
|
||||||
|
on_delete=django.db.models.deletion.CASCADE,
|
||||||
|
to="device.component",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name="component",
|
||||||
|
name="computer",
|
||||||
|
field=models.OneToOneField(
|
||||||
|
null=True,
|
||||||
|
on_delete=django.db.models.deletion.CASCADE,
|
||||||
|
to="device.computer",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
]
|
|
@ -0,0 +1,160 @@
|
||||||
|
from django.db import models
|
||||||
|
from user.models import User
|
||||||
|
from utils.constants import STR_SM_SIZE, STR_SIZE
|
||||||
|
|
||||||
|
|
||||||
|
# Create your models here.
|
||||||
|
|
||||||
|
|
||||||
|
class Device(models.Model):
|
||||||
|
created = models.DateTimeField(auto_now_add=True)
|
||||||
|
updated = models.DateTimeField(auto_now=True)
|
||||||
|
type = models.CharField(max_length=STR_SM_SIZE)
|
||||||
|
model = models.CharField(max_length=STR_SIZE, blank=True, null=True)
|
||||||
|
manufacturer = models.CharField(max_length=STR_SIZE, blank=True, null=True)
|
||||||
|
serial_number = models.CharField(max_length=STR_SIZE, blank=True, null=True)
|
||||||
|
part_number = models.CharField(max_length=STR_SIZE, blank=True, null=True)
|
||||||
|
brand = models.TextField(blank=True, null=True)
|
||||||
|
generation = models.SmallIntegerField(blank=True, null=True)
|
||||||
|
version = models.TextField(blank=True, null=True)
|
||||||
|
production_date = models.DateTimeField(blank=True, null=True)
|
||||||
|
variant = models.TextField(blank=True, null=True)
|
||||||
|
devicehub_id = models.TextField(unique=True, blank=True, null=True)
|
||||||
|
dhid_bk = models.CharField(max_length=STR_SIZE, blank=True, null=True)
|
||||||
|
phid_bk = models.CharField(max_length=STR_SIZE, blank=True, null=True)
|
||||||
|
family = models.CharField(max_length=STR_SIZE, blank=True, null=True)
|
||||||
|
hid = models.CharField(max_length=STR_SIZE, blank=True, null=True)
|
||||||
|
chid = models.CharField(max_length=STR_SIZE, blank=True, null=True)
|
||||||
|
active = models.BooleanField(default=True)
|
||||||
|
owner = models.ForeignKey(User, on_delete=models.CASCADE)
|
||||||
|
|
||||||
|
|
||||||
|
class PhysicalProperties(models.Model):
|
||||||
|
device = models.OneToOneField(Device, models.CASCADE, primary_key=True)
|
||||||
|
weight = models.FloatField(blank=True, null=True)
|
||||||
|
width = models.FloatField(blank=True, null=True)
|
||||||
|
height = models.FloatField(blank=True, null=True)
|
||||||
|
depth = models.FloatField(blank=True, null=True)
|
||||||
|
color = models.CharField(max_length=20, blank=True, null=True)
|
||||||
|
image = models.CharField(max_length=STR_SIZE, blank=True, null=True)
|
||||||
|
|
||||||
|
|
||||||
|
class Computer(models.Model):
|
||||||
|
class Types(models.TextChoices):
|
||||||
|
DESKTOP = "Desktop"
|
||||||
|
LAPTOP = "Laptop"
|
||||||
|
SERVER = "Server"
|
||||||
|
|
||||||
|
device = models.OneToOneField(Device, models.CASCADE, primary_key=True)
|
||||||
|
chassis = models.TextField(blank=True, null=True)
|
||||||
|
system_uuid = models.UUIDField()
|
||||||
|
sku = models.TextField(blank=True, null=True)
|
||||||
|
type = models.CharField(max_length=STR_SM_SIZE, choices=Types, default=Types.LAPTOP)
|
||||||
|
|
||||||
|
|
||||||
|
class Component(models.Model):
|
||||||
|
class Types(models.TextChoices):
|
||||||
|
GRAPHICCARD = "GraphicCard"
|
||||||
|
DATASTORAGE = "DataStorage"
|
||||||
|
MOTHERBOARD = "Motherboard"
|
||||||
|
NETWORKADAPTER = "NetworkAdapter"
|
||||||
|
PROCESSOR = "Processor"
|
||||||
|
RAMMODULE = "RamModule"
|
||||||
|
SOUNDCARD = "SoundCard"
|
||||||
|
DISPLAY = "Display"
|
||||||
|
BATTERY = "Battery"
|
||||||
|
CAMERA = "Camera"
|
||||||
|
|
||||||
|
device = models.OneToOneField(Device, models.CASCADE, primary_key=True)
|
||||||
|
type = models.CharField(max_length=STR_SM_SIZE, choices=Types)
|
||||||
|
computer = models.OneToOneField(Computer, models.CASCADE, null=True)
|
||||||
|
|
||||||
|
|
||||||
|
class GraphicCard(models.Model):
|
||||||
|
component = models.OneToOneField(Component, models.CASCADE)
|
||||||
|
memory = models.IntegerField(blank=True, null=True)
|
||||||
|
|
||||||
|
|
||||||
|
class DataStorage(models.Model):
|
||||||
|
class Interface(models.TextChoices):
|
||||||
|
ATA = 'ATA'
|
||||||
|
USB = 'USB'
|
||||||
|
PCI = 'PCI'
|
||||||
|
NVME = 'NVME'
|
||||||
|
|
||||||
|
class Type(models.TextChoices):
|
||||||
|
HARDDRIVE = "HardDrive"
|
||||||
|
SOLIDSTATEDRIVE = "SolidStateDrive"
|
||||||
|
|
||||||
|
component = models.OneToOneField(Component, models.CASCADE)
|
||||||
|
size = models.IntegerField(blank=True, null=True)
|
||||||
|
interface = models.CharField(max_length=STR_SM_SIZE, choices=Interface)
|
||||||
|
type = models.CharField(max_length=STR_SM_SIZE, choices=Type)
|
||||||
|
|
||||||
|
|
||||||
|
class Motherboard(models.Model):
|
||||||
|
component = models.OneToOneField(Component, models.CASCADE)
|
||||||
|
slots = models.SmallIntegerField(blank=True, null=True)
|
||||||
|
usb = models.SmallIntegerField(blank=True, null=True)
|
||||||
|
firewire = models.SmallIntegerField(blank=True, null=True)
|
||||||
|
serial = models.SmallIntegerField(blank=True, null=True)
|
||||||
|
pcmcia = models.SmallIntegerField(blank=True, null=True)
|
||||||
|
bios_date = models.DateTimeField()
|
||||||
|
ram_slots = models.SmallIntegerField(blank=True, null=True)
|
||||||
|
ram_max_size = models.IntegerField(blank=True, null=True)
|
||||||
|
|
||||||
|
|
||||||
|
class NetworkAdapter(models.Model):
|
||||||
|
component = models.OneToOneField(Component, models.CASCADE)
|
||||||
|
speed = models.IntegerField(blank=True, null=True)
|
||||||
|
wireless = models.BooleanField(default=False)
|
||||||
|
|
||||||
|
def __format__(self, format_spec):
|
||||||
|
v = super().__format__(format_spec)
|
||||||
|
if 's' in format_spec:
|
||||||
|
v += ' – {} Mbps'.format(self.speed)
|
||||||
|
return v
|
||||||
|
|
||||||
|
|
||||||
|
class Processor(models.Model):
|
||||||
|
component = models.OneToOneField(Component, models.CASCADE)
|
||||||
|
speed = models.FloatField(blank=True, null=True)
|
||||||
|
cores = models.SmallIntegerField(blank=True, null=True)
|
||||||
|
threads = models.SmallIntegerField(blank=True, null=True)
|
||||||
|
address = models.SmallIntegerField(blank=True, null=True)
|
||||||
|
|
||||||
|
|
||||||
|
class RamModule(models.Model):
|
||||||
|
class Interface(models.TextChoices):
|
||||||
|
SDRAM = 'SDRAM'
|
||||||
|
DDR = 'DDR SDRAM'
|
||||||
|
DDR2 = 'DDR2 SDRAM'
|
||||||
|
DDR3 = 'DDR3 SDRAM'
|
||||||
|
DDR4 = 'DDR4 SDRAM'
|
||||||
|
DDR5 = 'DDR5 SDRAM'
|
||||||
|
DDR6 = 'DDR6 SDRAM'
|
||||||
|
LPDDR3 = 'LPDDR3'
|
||||||
|
|
||||||
|
class Format(models.TextChoices):
|
||||||
|
DIMM = 'DIMM'
|
||||||
|
SODIMM = 'SODIMM'
|
||||||
|
|
||||||
|
component = models.OneToOneField(Component, models.CASCADE)
|
||||||
|
size = models.IntegerField(blank=True, null=True)
|
||||||
|
interface = models.CharField(max_length=STR_SM_SIZE, choices=Interface)
|
||||||
|
speed = models.SmallIntegerField(blank=True, null=True)
|
||||||
|
interface = models.CharField(max_length=STR_SM_SIZE, choices=Interface)
|
||||||
|
format = models.CharField(max_length=STR_SM_SIZE, choices=Format)
|
||||||
|
|
||||||
|
|
||||||
|
class SoundCard(models.Model):
|
||||||
|
component = models.OneToOneField(Component, models.CASCADE)
|
||||||
|
|
||||||
|
|
||||||
|
class Display(models.Model):
|
||||||
|
component = models.OneToOneField(Component, models.CASCADE)
|
||||||
|
|
||||||
|
|
||||||
|
class Battery(models.Model):
|
||||||
|
component = models.OneToOneField(Component, models.CASCADE)
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
from django.test import TestCase
|
||||||
|
|
||||||
|
# Create your tests here.
|
|
@ -0,0 +1,3 @@
|
||||||
|
from django.shortcuts import render
|
||||||
|
|
||||||
|
# Create your views here.
|
|
@ -0,0 +1,16 @@
|
||||||
|
"""
|
||||||
|
ASGI config for dhub project.
|
||||||
|
|
||||||
|
It exposes the ASGI callable as a module-level variable named ``application``.
|
||||||
|
|
||||||
|
For more information on this file, see
|
||||||
|
https://docs.djangoproject.com/en/5.0/howto/deployment/asgi/
|
||||||
|
"""
|
||||||
|
|
||||||
|
import os
|
||||||
|
|
||||||
|
from django.core.asgi import get_asgi_application
|
||||||
|
|
||||||
|
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "dhub.settings")
|
||||||
|
|
||||||
|
application = get_asgi_application()
|
|
@ -0,0 +1,137 @@
|
||||||
|
"""
|
||||||
|
Django settings for dhub project.
|
||||||
|
|
||||||
|
Generated by 'django-admin startproject' using Django 5.0.6.
|
||||||
|
|
||||||
|
For more information on this file, see
|
||||||
|
https://docs.djangoproject.com/en/5.0/topics/settings/
|
||||||
|
|
||||||
|
For the full list of settings and their values, see
|
||||||
|
https://docs.djangoproject.com/en/5.0/ref/settings/
|
||||||
|
"""
|
||||||
|
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
# Build paths inside the project like this: BASE_DIR / 'subdir'.
|
||||||
|
BASE_DIR = Path(__file__).resolve().parent.parent
|
||||||
|
|
||||||
|
|
||||||
|
# Quick-start development settings - unsuitable for production
|
||||||
|
# See https://docs.djangoproject.com/en/5.0/howto/deployment/checklist/
|
||||||
|
|
||||||
|
# SECURITY WARNING: keep the secret key used in production secret!
|
||||||
|
SECRET_KEY = "django-insecure-1p8rs@qf$$l^!vsbetagojw23kw@1ez(qi8^(s0t!wyh!l3"
|
||||||
|
|
||||||
|
# SECURITY WARNING: don't run with debug turned on in production!
|
||||||
|
DEBUG = True
|
||||||
|
|
||||||
|
ALLOWED_HOSTS = []
|
||||||
|
|
||||||
|
|
||||||
|
# Application definition
|
||||||
|
|
||||||
|
INSTALLED_APPS = [
|
||||||
|
"django.contrib.admin",
|
||||||
|
"django.contrib.auth",
|
||||||
|
"django.contrib.contenttypes",
|
||||||
|
"django.contrib.sessions",
|
||||||
|
"django.contrib.messages",
|
||||||
|
"django.contrib.staticfiles",
|
||||||
|
'django_extensions',
|
||||||
|
'django_bootstrap5',
|
||||||
|
"rest_framework",
|
||||||
|
"user",
|
||||||
|
"device",
|
||||||
|
"snapshot",
|
||||||
|
"action",
|
||||||
|
"tag",
|
||||||
|
"lot",
|
||||||
|
"documents",
|
||||||
|
"inventory",
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
MIDDLEWARE = [
|
||||||
|
"django.middleware.security.SecurityMiddleware",
|
||||||
|
"django.contrib.sessions.middleware.SessionMiddleware",
|
||||||
|
"django.middleware.common.CommonMiddleware",
|
||||||
|
"django.middleware.csrf.CsrfViewMiddleware",
|
||||||
|
"django.contrib.auth.middleware.AuthenticationMiddleware",
|
||||||
|
"django.contrib.messages.middleware.MessageMiddleware",
|
||||||
|
"django.middleware.clickjacking.XFrameOptionsMiddleware",
|
||||||
|
]
|
||||||
|
|
||||||
|
ROOT_URLCONF = "dhub.urls"
|
||||||
|
|
||||||
|
TEMPLATES = [
|
||||||
|
{
|
||||||
|
"BACKEND": "django.template.backends.django.DjangoTemplates",
|
||||||
|
"DIRS": [],
|
||||||
|
"APP_DIRS": True,
|
||||||
|
"OPTIONS": {
|
||||||
|
"context_processors": [
|
||||||
|
"django.template.context_processors.debug",
|
||||||
|
"django.template.context_processors.request",
|
||||||
|
"django.contrib.auth.context_processors.auth",
|
||||||
|
"django.contrib.messages.context_processors.messages",
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
]
|
||||||
|
|
||||||
|
WSGI_APPLICATION = "dhub.wsgi.application"
|
||||||
|
|
||||||
|
|
||||||
|
# Database
|
||||||
|
# https://docs.djangoproject.com/en/5.0/ref/settings/#databases
|
||||||
|
|
||||||
|
DATABASES = {
|
||||||
|
"default": {
|
||||||
|
"ENGINE": "django.db.backends.sqlite3",
|
||||||
|
"NAME": BASE_DIR / "db.sqlite3",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# Password validation
|
||||||
|
# https://docs.djangoproject.com/en/5.0/ref/settings/#auth-password-validators
|
||||||
|
|
||||||
|
AUTH_PASSWORD_VALIDATORS = [
|
||||||
|
{
|
||||||
|
"NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"NAME": "django.contrib.auth.password_validation.MinimumLengthValidator",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"NAME": "django.contrib.auth.password_validation.CommonPasswordValidator",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"NAME": "django.contrib.auth.password_validation.NumericPasswordValidator",
|
||||||
|
},
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
# Internationalization
|
||||||
|
# https://docs.djangoproject.com/en/5.0/topics/i18n/
|
||||||
|
|
||||||
|
LANGUAGE_CODE = "en-us"
|
||||||
|
|
||||||
|
TIME_ZONE = "UTC"
|
||||||
|
|
||||||
|
USE_I18N = True
|
||||||
|
|
||||||
|
USE_TZ = True
|
||||||
|
|
||||||
|
|
||||||
|
# Static files (CSS, JavaScript, Images)
|
||||||
|
# https://docs.djangoproject.com/en/5.0/howto/static-files/
|
||||||
|
|
||||||
|
STATIC_URL = "static/"
|
||||||
|
|
||||||
|
# Default primary key field type
|
||||||
|
# https://docs.djangoproject.com/en/5.0/ref/settings/#default-auto-field
|
||||||
|
|
||||||
|
DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField"
|
||||||
|
|
||||||
|
AUTH_USER_MODEL = 'user.User'
|
|
@ -0,0 +1,24 @@
|
||||||
|
"""
|
||||||
|
URL configuration for dhub project.
|
||||||
|
|
||||||
|
The `urlpatterns` list routes URLs to views. For more information please see:
|
||||||
|
https://docs.djangoproject.com/en/5.0/topics/http/urls/
|
||||||
|
Examples:
|
||||||
|
Function views
|
||||||
|
1. Add an import: from my_app import views
|
||||||
|
2. Add a URL to urlpatterns: path('', views.home, name='home')
|
||||||
|
Class-based views
|
||||||
|
1. Add an import: from other_app.views import Home
|
||||||
|
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
|
||||||
|
Including another URLconf
|
||||||
|
1. Import the include() function: from django.urls import include, path
|
||||||
|
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
|
||||||
|
"""
|
||||||
|
|
||||||
|
# from django.contrib import admin
|
||||||
|
from django.urls import path, include
|
||||||
|
|
||||||
|
urlpatterns = [
|
||||||
|
# path("admin/", admin.site.urls),
|
||||||
|
path('api/', include('snapshot.urls')),
|
||||||
|
]
|
|
@ -0,0 +1,16 @@
|
||||||
|
"""
|
||||||
|
WSGI config for dhub project.
|
||||||
|
|
||||||
|
It exposes the WSGI callable as a module-level variable named ``application``.
|
||||||
|
|
||||||
|
For more information on this file, see
|
||||||
|
https://docs.djangoproject.com/en/5.0/howto/deployment/wsgi/
|
||||||
|
"""
|
||||||
|
|
||||||
|
import os
|
||||||
|
|
||||||
|
from django.core.wsgi import get_wsgi_application
|
||||||
|
|
||||||
|
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "dhub.settings")
|
||||||
|
|
||||||
|
application = get_wsgi_application()
|
|
@ -0,0 +1,3 @@
|
||||||
|
from django.contrib import admin
|
||||||
|
|
||||||
|
# Register your models here.
|
|
@ -0,0 +1,6 @@
|
||||||
|
from django.apps import AppConfig
|
||||||
|
|
||||||
|
|
||||||
|
class DocumentsConfig(AppConfig):
|
||||||
|
default_auto_field = "django.db.models.BigAutoField"
|
||||||
|
name = "documents"
|
|
@ -0,0 +1,3 @@
|
||||||
|
from django.db import models
|
||||||
|
|
||||||
|
# Create your models here.
|
|
@ -0,0 +1,3 @@
|
||||||
|
from django.test import TestCase
|
||||||
|
|
||||||
|
# Create your tests here.
|
|
@ -0,0 +1,3 @@
|
||||||
|
from django.shortcuts import render
|
||||||
|
|
||||||
|
# Create your views here.
|
|
@ -0,0 +1,3 @@
|
||||||
|
from django.contrib import admin
|
||||||
|
|
||||||
|
# Register your models here.
|
|
@ -0,0 +1,6 @@
|
||||||
|
from django.apps import AppConfig
|
||||||
|
|
||||||
|
|
||||||
|
class InventoryConfig(AppConfig):
|
||||||
|
default_auto_field = "django.db.models.BigAutoField"
|
||||||
|
name = "inventory"
|
|
@ -0,0 +1,3 @@
|
||||||
|
from django.db import models
|
||||||
|
|
||||||
|
# Create your models here.
|
|
@ -0,0 +1,3 @@
|
||||||
|
from django.test import TestCase
|
||||||
|
|
||||||
|
# Create your tests here.
|
|
@ -0,0 +1,3 @@
|
||||||
|
from django.shortcuts import render
|
||||||
|
|
||||||
|
# Create your views here.
|
|
@ -0,0 +1,3 @@
|
||||||
|
from django.contrib import admin
|
||||||
|
|
||||||
|
# Register your models here.
|
|
@ -0,0 +1,6 @@
|
||||||
|
from django.apps import AppConfig
|
||||||
|
|
||||||
|
|
||||||
|
class LotConfig(AppConfig):
|
||||||
|
default_auto_field = "django.db.models.BigAutoField"
|
||||||
|
name = "lot"
|
|
@ -0,0 +1,3 @@
|
||||||
|
from django.db import models
|
||||||
|
|
||||||
|
# Create your models here.
|
|
@ -0,0 +1,3 @@
|
||||||
|
from django.test import TestCase
|
||||||
|
|
||||||
|
# Create your tests here.
|
|
@ -0,0 +1,3 @@
|
||||||
|
from django.shortcuts import render
|
||||||
|
|
||||||
|
# Create your views here.
|
|
@ -0,0 +1,22 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
"""Django's command-line utility for administrative tasks."""
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
"""Run administrative tasks."""
|
||||||
|
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "dhub.settings")
|
||||||
|
try:
|
||||||
|
from django.core.management import execute_from_command_line
|
||||||
|
except ImportError as exc:
|
||||||
|
raise ImportError(
|
||||||
|
"Couldn't import Django. Are you sure it's installed and "
|
||||||
|
"available on your PYTHONPATH environment variable? Did you "
|
||||||
|
"forget to activate a virtual environment?"
|
||||||
|
) from exc
|
||||||
|
execute_from_command_line(sys.argv)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
|
@ -0,0 +1,23 @@
|
||||||
|
4 login
|
||||||
|
8 device models
|
||||||
|
4 inventory template
|
||||||
|
4 upload snapshots
|
||||||
|
16 parse snapshots
|
||||||
|
16 build devices
|
||||||
|
8 action models
|
||||||
|
8 view actions
|
||||||
|
8 lot models
|
||||||
|
16 view lots
|
||||||
|
8 edit device
|
||||||
|
16 documents
|
||||||
|
8 tag
|
||||||
|
8 print label
|
||||||
|
4 server erase
|
||||||
|
4 profile
|
||||||
|
8 erase views
|
||||||
|
8 erase certificate
|
||||||
|
4 inventory snapshots
|
||||||
|
8 search
|
||||||
|
join split devices
|
||||||
|
|
||||||
|
168 horas => 21 dias
|
|
@ -0,0 +1,5 @@
|
||||||
|
black==24.4.2
|
||||||
|
Django==5.0.6
|
||||||
|
django-bootstrap5==24.2
|
||||||
|
django-extensions==3.2.3
|
||||||
|
djangorestframework==3.15.1
|
|
@ -0,0 +1,3 @@
|
||||||
|
from django.contrib import admin
|
||||||
|
|
||||||
|
# Register your models here.
|
|
@ -0,0 +1,6 @@
|
||||||
|
from django.apps import AppConfig
|
||||||
|
|
||||||
|
|
||||||
|
class ActionConfig(AppConfig):
|
||||||
|
default_auto_field = "django.db.models.BigAutoField"
|
||||||
|
name = "snapshot"
|
|
@ -0,0 +1,75 @@
|
||||||
|
# Generated by Django 5.0.6 on 2024-06-11 09:20
|
||||||
|
|
||||||
|
import django.db.models.deletion
|
||||||
|
from django.conf import settings
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
initial = True
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
("device", "0001_initial"),
|
||||||
|
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name="Snapshot",
|
||||||
|
fields=[
|
||||||
|
(
|
||||||
|
"id",
|
||||||
|
models.BigAutoField(
|
||||||
|
auto_created=True,
|
||||||
|
primary_key=True,
|
||||||
|
serialize=False,
|
||||||
|
verbose_name="ID",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
("created", models.DateTimeField(auto_now_add=True)),
|
||||||
|
(
|
||||||
|
"software",
|
||||||
|
models.CharField(
|
||||||
|
choices=[("Workbench", "Workbench")],
|
||||||
|
default="Workbench",
|
||||||
|
max_length=32,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
("uuid", models.UUIDField()),
|
||||||
|
("version", models.CharField(max_length=32)),
|
||||||
|
("sid", models.CharField(max_length=32)),
|
||||||
|
("settings_version", models.CharField(max_length=32)),
|
||||||
|
("is_server_erase", models.BooleanField(default=False)),
|
||||||
|
(
|
||||||
|
"severity",
|
||||||
|
models.SmallIntegerField(
|
||||||
|
choices=[
|
||||||
|
(0, "Info"),
|
||||||
|
(1, "Notice"),
|
||||||
|
(2, "Warning"),
|
||||||
|
(3, "Error"),
|
||||||
|
],
|
||||||
|
default=0,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
("start_time", models.DateTimeField()),
|
||||||
|
("end_time", models.DateTimeField()),
|
||||||
|
("components", models.ManyToManyField(to="device.component")),
|
||||||
|
(
|
||||||
|
"computer",
|
||||||
|
models.ForeignKey(
|
||||||
|
on_delete=django.db.models.deletion.CASCADE,
|
||||||
|
to="device.computer",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"owner",
|
||||||
|
models.ForeignKey(
|
||||||
|
on_delete=django.db.models.deletion.CASCADE,
|
||||||
|
to=settings.AUTH_USER_MODEL,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
]
|
|
@ -0,0 +1,31 @@
|
||||||
|
from django.db import models
|
||||||
|
from utils.constants import STR_SM_SIZE
|
||||||
|
from user.models import User
|
||||||
|
from device.models import Computer, Component
|
||||||
|
|
||||||
|
# Create your models here.
|
||||||
|
|
||||||
|
|
||||||
|
class Snapshot(models.Model):
|
||||||
|
class SoftWare(models.TextChoices):
|
||||||
|
WORKBENCH= "Workbench"
|
||||||
|
|
||||||
|
class Severity(models.IntegerChoices):
|
||||||
|
Info = 0, "Info"
|
||||||
|
Notice = 1, "Notice"
|
||||||
|
Warning = 2, "Warning"
|
||||||
|
Error = 3, "Error"
|
||||||
|
|
||||||
|
created = models.DateTimeField(auto_now_add=True)
|
||||||
|
software = models.CharField(max_length=STR_SM_SIZE, choices=SoftWare, default=SoftWare.WORKBENCH)
|
||||||
|
uuid = models.UUIDField()
|
||||||
|
version = models.CharField(max_length=STR_SM_SIZE)
|
||||||
|
sid = models.CharField(max_length=STR_SM_SIZE)
|
||||||
|
settings_version = models.CharField(max_length=STR_SM_SIZE)
|
||||||
|
is_server_erase = models.BooleanField(default=False)
|
||||||
|
severity = models.SmallIntegerField(choices=Severity, default=Severity.Info)
|
||||||
|
start_time = models.DateTimeField()
|
||||||
|
end_time = models.DateTimeField()
|
||||||
|
owner = models.ForeignKey(User, on_delete=models.CASCADE)
|
||||||
|
computer = models.ForeignKey(Computer, on_delete=models.CASCADE)
|
||||||
|
components = models.ManyToManyField(Component)
|
|
@ -0,0 +1,8 @@
|
||||||
|
from rest_framework import serializers
|
||||||
|
from snapshot.models import Snapshot
|
||||||
|
|
||||||
|
class SnapshotSerializer(serializers.ModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = Snapshot
|
||||||
|
fields = ['id', 'title', 'content']
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
from django.test import TestCase
|
||||||
|
|
||||||
|
# Create your tests here.
|
|
@ -0,0 +1,10 @@
|
||||||
|
from django.urls import path, include
|
||||||
|
from rest_framework.routers import DefaultRouter
|
||||||
|
from snapshot.views import SnapshotViewSet
|
||||||
|
|
||||||
|
router = DefaultRouter()
|
||||||
|
router.register(r'snapshots', SnapshotViewSet)
|
||||||
|
|
||||||
|
urlpatterns = [
|
||||||
|
path('', include(router.urls)),
|
||||||
|
]
|
|
@ -0,0 +1,11 @@
|
||||||
|
# from django.shortcuts import render
|
||||||
|
from rest_framework import viewsets
|
||||||
|
from snapshot.models import Snapshot
|
||||||
|
from snapshot.serializers import SnapshotSerializer
|
||||||
|
|
||||||
|
|
||||||
|
class SnapshotViewSet(viewsets.ModelViewSet):
|
||||||
|
queryset = Snapshot.objects.all()
|
||||||
|
serializer_class = SnapshotSerializer
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
from django.contrib import admin
|
||||||
|
|
||||||
|
# Register your models here.
|
|
@ -0,0 +1,6 @@
|
||||||
|
from django.apps import AppConfig
|
||||||
|
|
||||||
|
|
||||||
|
class TagConfig(AppConfig):
|
||||||
|
default_auto_field = "django.db.models.BigAutoField"
|
||||||
|
name = "tag"
|
|
@ -0,0 +1,3 @@
|
||||||
|
from django.db import models
|
||||||
|
|
||||||
|
# Create your models here.
|
|
@ -0,0 +1,3 @@
|
||||||
|
from django.test import TestCase
|
||||||
|
|
||||||
|
# Create your tests here.
|
|
@ -0,0 +1,3 @@
|
||||||
|
from django.shortcuts import render
|
||||||
|
|
||||||
|
# Create your views here.
|
|
@ -0,0 +1,10 @@
|
||||||
|
from django.contrib import admin
|
||||||
|
from django.contrib.auth import get_user_model
|
||||||
|
|
||||||
|
# Register your models here.
|
||||||
|
|
||||||
|
|
||||||
|
User = get_user_model()
|
||||||
|
|
||||||
|
admin.site.register(User)
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
from django.apps import AppConfig
|
||||||
|
|
||||||
|
|
||||||
|
class AuthConfig(AppConfig):
|
||||||
|
default_auto_field = "django.db.models.BigAutoField"
|
||||||
|
name = "user"
|
|
@ -0,0 +1,64 @@
|
||||||
|
# Generated by Django 5.0.6 on 2024-06-11 09:19
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
initial = True
|
||||||
|
|
||||||
|
dependencies = []
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name="User",
|
||||||
|
fields=[
|
||||||
|
(
|
||||||
|
"id",
|
||||||
|
models.BigAutoField(
|
||||||
|
auto_created=True,
|
||||||
|
primary_key=True,
|
||||||
|
serialize=False,
|
||||||
|
verbose_name="ID",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
("password", models.CharField(max_length=128, verbose_name="password")),
|
||||||
|
(
|
||||||
|
"last_login",
|
||||||
|
models.DateTimeField(
|
||||||
|
blank=True, null=True, verbose_name="last login"
|
||||||
|
),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"email",
|
||||||
|
models.EmailField(
|
||||||
|
max_length=255, unique=True, verbose_name="Email address"
|
||||||
|
),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"is_active",
|
||||||
|
models.BooleanField(default=True, verbose_name="is active"),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"is_admin",
|
||||||
|
models.BooleanField(default=False, verbose_name="is admin"),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"first_name",
|
||||||
|
models.CharField(
|
||||||
|
blank=True, max_length=255, null=True, verbose_name="First name"
|
||||||
|
),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"last_name",
|
||||||
|
models.CharField(
|
||||||
|
blank=True, max_length=255, null=True, verbose_name="Last name"
|
||||||
|
),
|
||||||
|
),
|
||||||
|
("accept_gdpr", models.BooleanField(default=False)),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
"abstract": False,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
]
|
|
@ -0,0 +1,80 @@
|
||||||
|
from django.db import models
|
||||||
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
from django.contrib.auth.models import BaseUserManager, AbstractBaseUser
|
||||||
|
|
||||||
|
# Create your models here.
|
||||||
|
|
||||||
|
|
||||||
|
class UserManager(BaseUserManager):
|
||||||
|
def create_user(self, email, password=None):
|
||||||
|
"""
|
||||||
|
Creates and saves a User with the given email, date of
|
||||||
|
birth and password.
|
||||||
|
"""
|
||||||
|
if not email:
|
||||||
|
raise ValueError("Users must have an email address")
|
||||||
|
|
||||||
|
user = self.model(
|
||||||
|
email=self.normalize_email(email),
|
||||||
|
)
|
||||||
|
|
||||||
|
user.set_password(password)
|
||||||
|
user.save(using=self._db)
|
||||||
|
return user
|
||||||
|
|
||||||
|
def create_superuser(self, email, password=None):
|
||||||
|
"""
|
||||||
|
Creates and saves a superuser with the given email, date of
|
||||||
|
birth and password.
|
||||||
|
"""
|
||||||
|
user = self.create_user(
|
||||||
|
email,
|
||||||
|
password=password,
|
||||||
|
)
|
||||||
|
user.is_admin = True
|
||||||
|
user.save(using=self._db)
|
||||||
|
return user
|
||||||
|
|
||||||
|
|
||||||
|
class User(AbstractBaseUser):
|
||||||
|
email = models.EmailField(
|
||||||
|
_('Email address'),
|
||||||
|
max_length=255,
|
||||||
|
unique=True,
|
||||||
|
)
|
||||||
|
is_active = models.BooleanField(_("is active"), default=True)
|
||||||
|
is_admin = models.BooleanField(_("is admin"), default=False)
|
||||||
|
first_name = models.CharField(_("First name"), max_length=255, blank=True, null=True)
|
||||||
|
last_name = models.CharField(_("Last name"), max_length=255, blank=True, null=True)
|
||||||
|
accept_gdpr = models.BooleanField(default=False)
|
||||||
|
|
||||||
|
objects = UserManager()
|
||||||
|
|
||||||
|
USERNAME_FIELD = "email"
|
||||||
|
REQUIRED_FIELDS = []
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return self.email
|
||||||
|
|
||||||
|
def has_perm(self, perm, obj=None):
|
||||||
|
"Does the user have a specific permission?"
|
||||||
|
# Simplest possible answer: Yes, always
|
||||||
|
return True
|
||||||
|
|
||||||
|
def has_module_perms(self, app_label):
|
||||||
|
"Does the user have permissions to view the app `app_label`?"
|
||||||
|
# Simplest possible answer: Yes, always
|
||||||
|
return True
|
||||||
|
|
||||||
|
@property
|
||||||
|
def is_staff(self):
|
||||||
|
"Is the user a member of staff?"
|
||||||
|
# Simplest possible answer: All admins are staff
|
||||||
|
return self.is_admin
|
||||||
|
|
||||||
|
@property
|
||||||
|
def username(self):
|
||||||
|
"Is the email of the user"
|
||||||
|
return self.email
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
from django.test import TestCase
|
||||||
|
|
||||||
|
# Create your tests here.
|
|
@ -0,0 +1,3 @@
|
||||||
|
from django.shortcuts import render
|
||||||
|
|
||||||
|
# Create your views here.
|
|
@ -0,0 +1,7 @@
|
||||||
|
# constants declarated for all proyect
|
||||||
|
|
||||||
|
|
||||||
|
STR_XSM_SIZE = 16
|
||||||
|
STR_SM_SIZE = 32
|
||||||
|
STR_SIZE = 64
|
||||||
|
STR_BIG_SIZE = 128
|
Loading…
Reference in New Issue