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

Nowa wersja
Poprzednia wersja
wiki:django_setup [2021/01/23 12:06] lukaszwiki:django_setup [2023/03/26 15:40] (aktualna) 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 ====
  
 <code> <code>
-# sudo dnf install mariadb mariadb-server mariadb-devel+# sudo dnf install mariadb mariadb-server mariadb-devel python3-devel
 # sudo systemctl start mariadb # sudo systemctl start mariadb
 # sudo mysql_secure_installation # sudo mysql_secure_installation
Linia 49: Linia 49:
         'NAME': 'project',         'NAME': 'project',
         'USER': 'project',         'USER': 'project',
-        'PASSWORD': 'project',+        'PASSWORD': 'tajnehaslo2',
         'HOST': 'localhost',   # Or an IP Address that your DB is hosted on         'HOST': 'localhost',   # Or an IP Address that your DB is hosted on
         'PORT': '3306',         'PORT': '3306',
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ę 
 +
 +  DATABASE_ROUTERS = ['dbroute.ReplicationRouter']
 +
 +oraz zmienić domyślny słownik DATABSES z Sqlite3 na Marię:
 +
 +<code>
 +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.1611400006.txt.gz · ostatnio zmienione: 2022/08/18 11:44 (edycja zewnętrzna)

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