[PYTHON] [Django] Erklären Sie den Fluchtweg sorgfältig, wenn Sie die Tabelle einer anderen Anwendung wirklich verwenden möchten

Einführung

Ich habe eine Weile gebraucht, um herauszufinden, wie man die Tabelle einer anderen App verwendet, also werde ich sie als Artikel schreiben.

Lösungen

Es gibt zwei Möglichkeiten, dies zu tun.

1. 1. Importieren und verwenden Sie das Modell der Tabelle, die Sie verwenden möchten

Diese Methode wird diesmal erklärt.

2. Apps integrieren

Integrieren Sie Apps, die eine Tabelle als eine App freigeben möchten. Nach Djangos Grundidee "Jede App sollte keine Abhängigkeit haben", ** Dies ist ein unkomplizierter Ansatz ** </ font>.

Einfach ausgedrückt, wenn es Apps A </ font> und B </ font> gibt, werden diese in der App A </ font> definiert. Die Tatsache, dass B </ font> die erstellte Tabelle verwendet, bedeutet, dass B </ font> A </ font> hat. Dies liegt daran, dass es die erste App ist, die funktioniert = ** " B </ font> hängt von A </ font>" ** ab.

** Das heißt, ** Ich denke, es gibt Zeiten, in denen Sie keine größeren Änderungen vornehmen können, um Apps in ein System zu integrieren, das bereits in der Produktion läuft. In diesem Artikel werde ich einen Fluchtweg vorstellen, der in solchen Fällen verwendet werden kann.

  • Wenn es sich noch in der Entwicklung befindet oder wenn es nicht zu spät ist, es zu beheben ** Methode 2 wird dringend empfohlen **.

Punkt

Wenn Sie PyCharm oder VSCode verwenden, wird der Fehler überprüft (wahrscheinlich in anderen IDEs und Editoren). ** Ignorieren **. Python hat die Regel, dass sich die ** Importquelle in derselben oder einer niedrigeren Ebene befinden muss **, aber es ist eine Methode, um auf eine Weise zu importieren, die gegen die Regeln verstößt.

Kommentar

Erstellen Sie tatsächlich eine App A </ font> und eine App B </ font> und von B </ font> zu A A < Schauen Sie sich die Tabelle / font> an.

  • Als Voraussetzung wird angenommen, dass Python bereits installiert ist. Erstellen Sie eine Django-App mit dem folgenden Befehl
> mkdir django-model-test
> cd django-model-test
django-model-test> python -m venv venv
django-model-test> venv\Scripts\activate  #Für Windows
django-model-test> source venv/bin/activate  # Mac,Für Linux
(venv) django-model-test> pip install django
(venv) django-model-test> mkdir Src
(venv) django-model-test> cd Src
(venv) django-model-test\Src> django-admin startproject config .
(venv) django-model-test\Src> python manage.py runserver

Wenn Sie auf localhost: 8000 zugreifen und der Django-Demobildschirm angezeigt wird, ist dies in Ordnung. image.png

Beenden Sie den Testserver mit Strg + C und fahren Sie fort. Führen Sie den folgenden Befehl aus

django-model-test\Src> python manage.py startapp appA
django-model-test\Src> python manage.py startapp appB

Zu INSTALLED_APPS in settings.py hinzugefügt

django-model-test\Src\config\settings.py


INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    #Nachtrag
    'appA.apps.AppaConfig',
    'appB.apps.AppbConfig'
]

Stellen Sie urls.py ein

django-model-test\Src\config\urls.py


from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path('admin/', admin.site.urls),
    path('appB/', include('appB.urls', namespace='appB'))
]

django-model-test\Src\appB\urls.py


from django.urls import path
from . import views

app_name = 'appB'
urlpatterns = [
    path('', views.top_page, name='top_page'),
    ]
]

Erstellen Sie index.html (und das Zielverzeichnis).

django-model-test\Src\appB\templates\appB\index.html


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
Referenzerfolg!
</body>
</html>

Erstellen Sie eine Testtabelle in models.py von appA

django-model-test\Src\appA\models.py


from django.db import models


class AppATable(models.Model):

    sample = models.TextField()

Führen Sie die Migration vom Terminal aus

django-model-test\Src> python manage.py makemigrations
django-model-test\Src> python manage.py migrate

Erstellen Sie zum Schluss die wesentlichen Views.py! Wahrscheinlich kann nicht auf die dritte Zeile verwiesen werden und es tritt ein Fehler auf, aber bitte ignorieren Sie ihn.

  • Bitte stellen Sie sicher, dass Sie vor dem Erstellen migrieren

django-model-test\Src\appB\views.py


from django.shortcuts import render
from django.views.generic import View
from appA.models import AppATable


class TopPageView(View):
    def get(self, request, *args, **kwargs):

        appATable_data = AppATable.objects.all()
        print(appATable_data.values())

        return render(request, 'appB/index.html')


top_page = TopPageView.as_view()

Legen Sie die Testdaten in die DB. Diesmal habe ich es über die IDE gemacht, aber wenn Sie das Tool nicht haben, können Sie es über die Django-Verwaltungssite eingeben. image.png

Das ist alles zur Vorbereitung. Starten Sie den Testserver und greifen Sie auf [localhost: 8000 / appB] zu. Es ist in Ordnung, wenn der Text "Referenz erfolgreich!" Im Browser angezeigt wird und das Ergebnis der Druckanweisung (Inhalt von appATable) vom Terminal angezeigt wird. image.png image.png

Das ist alles. Vielen Dank für Ihre harte Arbeit: cat2:

Recommended Posts