A necessidade de dados se torna mais importante quando você completa sua primeira versão do site usando Django ou API REST usando Django Rest Framework (DRF). Para um problema semelhante, escrevi meu artigo anterior, no qual discuti uma abordagem direta de despejo de dados JSON no modelo Django, inserindo-os diretamente no banco de dados e tabelas SQLite. No entanto, também mencionei que o Django possui loaddata, dumpdata e fixtures para problemas semelhantes, mas que precisam de um pouco mais de compreensão do framework.
Hoje, vou percorrer essa curva de aprendizado e discutir como converter seus dados JSON normais em um acessório e, em seguida, usar loaddata para despejar dados JSON em um modelo específico. Da mesma forma, se você tiver alguns dados para modelos (podem ser adicionados através da página de administração, etc.), então como despejá-los como acessórios para usar com outro modelo ou em outro projeto.
O artigo anterior tem duas partes: a primeira parte é a configuração normal necessária para o despejo de dados e a segunda parte é sobre o script python para despejar dados JSON no modelo. Portanto, seja breve no artigo. Neste artigo, começarei pela segunda parte e você pode seguir a Parte I do artigo anterior para seguir este artigo. Então, supondo que você tenha um aplicativo de livro e no qual exista o modelo Book dentro de models.py, da mesma forma os endpoints da API estão prontos, como (repositório Github da postagem anterior) :
http://127.0.0.1:8000/api/books/1
Despejo de dados JSON para modelo
from django.db import models class Book(models.Model): title = models.CharField(max_length=200) author = models.CharField(max_length=100) isbn = models.CharField(max_length=13, unique=True) pages = models.PositiveIntegerField() language = models.CharField(max_length=30) def __str__(self): return self.titlelivros.json
from django.db import models class Book(models.Model): title = models.CharField(max_length=200) author = models.CharField(max_length=100) isbn = models.CharField(max_length=13, unique=True) pages = models.PositiveIntegerField() language = models.CharField(max_length=30) def __str__(self): return self.titleExemplo 2: O modelo de livro do artigo anterior
from django.db import models class Book(models.Model): title = models.CharField(max_length=200) author = models.CharField(max_length=100) isbn = models.CharField(max_length=13, unique=True) pages = models.PositiveIntegerField() language = models.CharField(max_length=30) def __str__(self): return self.titleVocê pode encontrar o arquivo data.json aqui.
Despejo de dados para modelar
Book e um arquivo JSON extra com informações de livros. Então, agora qual é o problema?
Queremos despejar os dados JSON no modelo para que possam ser usados com o site Django (por exemplo, passando dados para o modelo para exibição ao usuário) ou servindo dados via API para o frontend.
Vamos começar explicando essas ferramentas e depois nos aprofundaremos no script python para realizar a tarefa de despejo de dados.
Carregar dados
$django-admin loaddataJogos
Um fixture é uma coleção de arquivos que contém o conteúdo serializado do banco de dados. Cada aparelho possui um nome exclusivo e os arquivos que o compõem podem ser distribuídos em vários diretórios, em vários aplicativos. [fonte]Vamos pular para a parte futura do artigo e dar uma olhada nas luminárias dos
livros.
from django.db import models class Book(models.Model): title = models.CharField(max_length=200) author = models.CharField(max_length=100) isbn = models.CharField(max_length=13, unique=True) pages = models.PositiveIntegerField() language = models.CharField(max_length=30) def __str__(self): return self.titleSe você deu uma olhada no arquivo fixture, você deve ter descoberto que é apenas outro arquivo JSON com mais pares de valores-chave e esses são metadados para modelos/tabelas do Django. Então, sim, você está certo e nosso objetivo é converter nosso formato books.json para o formato fixture para que a ferramenta de administração do Django o reconheça e despeje os dados em tabelas adequadas.
Agora, para criar um fixture você pode ter duas situações: 1) você tem dados em modelos e deseja criar um fixture para uso ou teste futuro etc.
2) Você não possui dados em modelos/tabelas, mas possui dados em fontes externas como json, csv ou qualquer outro formato e deseja carregar esses dados no Django por meio do comando discutido anteriormente
loaddata .( Isto O artigo é sobre esta situação, mas no final, usaremos dumpdata para comparar a saída manual e dumpdata.)
Existem três pontos de interesse e ordem [fonte]:
Nota:Um dos principais benefícios do uso de fixtures é aplicar e usar compressão em fixtures.Dados de despejo
Nota 1: envia para a saída padrão todos os dados no banco de dados associados ao(s) aplicativo(s) nomeado(s).django-admin dumpdata [app_label[.ModelName]Nota 2: A saída de dumpdata pode ser usada como entrada para loaddata.(como fixture)
from django.db import models class Book(models.Model): title = models.CharField(max_length=200) author = models.CharField(max_length=100) isbn = models.CharField(max_length=13, unique=True) pages = models.PositiveIntegerField() language = models.CharField(max_length=30) def __str__(self): return self.titlevocê pode ler mais neste link.
Script Python de json simples para Django Fixtures.
from django.db import models class Book(models.Model): title = models.CharField(max_length=200) author = models.CharField(max_length=100) isbn = models.CharField(max_length=13, unique=True) pages = models.PositiveIntegerField() language = models.CharField(max_length=30) def __str__(self): return self.titleDepois que seu fixture for criado como books.json. É hora de movê-lo /copy para um local adequado (book/fixtures/book/) para que o gerenciador Django possa encontrá-lo facilmente e então executar o comando loaddata para despejar todos os dados no modelo Book.
from django.db import models class Book(models.Model): title = models.CharField(max_length=200) author = models.CharField(max_length=100) isbn = models.CharField(max_length=13, unique=True) pages = models.PositiveIntegerField() language = models.CharField(max_length=30) def __str__(self): return self.titleVocê também pode usar um script semelhante para gravar dados diretamente no método sing .save() do modelo. Abaixo está o método create_book() que pode ser usado para inserir um ou mais registros de dados (loop) no modelo Book.
from django.db import models class Book(models.Model): title = models.CharField(max_length=200) author = models.CharField(max_length=100) isbn = models.CharField(max_length=13, unique=True) pages = models.PositiveIntegerField() language = models.CharField(max_length=30) def __str__(self): return self.titleVocê também pode consultar o Dumpscript das extensões do Django para tarefas semelhantes.
Espero que seja útil.
Nota: O artigo não foi revisado e formatado corretamente devido à restrição de tempo. Portanto, use-o com cuidado e deixe comentários abaixo para quaisquer erros, dúvidas ou dúvidas. Responderei e editarei o artigo com o tempo.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3