Narzędzia użytkownika

Narzędzia witryny


wiki:django_setup

Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Poprzednia rewizja po obu stronachPoprzednia wersja
Nowa wersjaNastępna rewizja po obu stronach
wiki:django_setup [2021/04/19 11:34] lukaszwiki:django_setup [2022/05/28 13:17] lukasz
Linia 1: Linia 1:
 ====== Konfiguracja Django ====== ====== Konfiguracja Django ======
  
-Na przykładzie Fedory 33 (na CentOS jest tak samo) oraz MariaDB. Nazwę użytkownika w bazie danych najlepiej mieć taką samą, jak w /etc/passwd.+Na przykładzie Fedory (na CentOS jest tak samo) oraz MariaDB. Nazwę użytkownika w bazie danych najlepiej mieć taką samą, jak w /etc/passwd.
  
 ==== Baza danych ==== ==== Baza danych ====
Linia 59: Linia 59:
  
   # python manage.py runserver   # python manage.py runserver
 +
 +----
 +
 +==== Django i replikacja w MariaDB ====
 +
 +Przy założeniu, że mamy dwie bazy danych w klasycznym układzie:
 +  * primary - Rear/Write
 +  * replica - ReadOnly
 +który został opisany na [[wiki:mariadb_replika|tej stronie]].
 +
 +W katalogu z plikiem manage.py utworzyć plik dbroute.py o treści:
 +
 +<code>
 +import random
 +from django.conf import settings
 +
 +class ReplicationRouter:
 +    def db_for_read(self, model, **hints):
 +        """
 +        Randomly pick a database to read from
 +        """
 +        return random.choice([key for key in settings.DATABASES])
 +
 +    def db_for_write(self, model, **hints):
 +        """
 +        Always send write queries to the master database.
 +        """
 +        return 'default';
 +
 +    def allow_relation(self, obj1, obj2, **hints):
 +        """
 +        This isn't really applicable for this use-case.
 +        """
 +        return True
 +
 +    def allow_migrate(self, db, app_label, model_name=None, **hints):
 +        """
 +        Only allow migration operations on the master database, just in case.
 +        """
 +        if db == 'default':
 +            return True
 +        return None
 +</code>
 +
 +W pliku settings.py należy dodać linijkę 
 +
 +
 +<code>
 +  DATABASE_ROUTERS = ['dbroute.ReplicationRouter']
 +
 +oraz zmienić domyślny słownik DATABSES z Sqlite3 na Marię:
 +
 +DATABASES = {
 +    'default': {
 +        'ENGINE': 'django.db.backends.mysql',
 +        'NAME': 'nazwabazydanych',
 +        'USER': 'uzytkownik',
 +        'PASSWORD': 'haslo',
 +        'HOST': 'maria1.ping.local',
 +        'PORT': '3306'
 +    },
 +    'replica': {
 +        'ENGINE': 'django.db.backends.mysql',
 +        'NAME': 'nazwabazydanych',
 +        'USER': 'uzytkownik',
 +        'PASSWORD': 'haslo',
 +        'HOST': 'maria2.ping.local',
 +        'PORT': '3306'
 +    },
 +}
 +</code>
 +
  
wiki/django_setup.txt · ostatnio zmienione: 2023/03/26 15:40 przez lukasz

Wszystkie treści w tym wiki, którym nie przyporządkowano licencji, podlegają licencji: Public Domain
Public Domain Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki