Rumah >pembangunan bahagian belakang >Tutorial Python >Petua sokongan berbilang tapak dalam rangka kerja Django

Petua sokongan berbilang tapak dalam rangka kerja Django

WBOY
WBOYasal
2023-06-17 08:33:091241semak imbas

Rangka kerja Django ialah rangka kerja pembangunan web yang sangat popular, yang digunakan secara meluas dalam pembangunan pelbagai aplikasi. Dalam sesetengah senario aplikasi, berbilang tapak perlu disokong, yang memerlukan penggunaan teknik sokongan berbilang tapak dalam rangka kerja Django. Artikel ini akan memperkenalkan teknik sokongan berbilang tapak dalam rangka kerja Django untuk membantu pembangun menangani keperluan senario berbilang tapak dengan lebih baik.

  1. Apakah itu multisite?

Dalam rangka kerja Django, tapak biasanya merujuk kepada aplikasi web yang mengandungi satu atau lebih aplikasi Django. Tapak web mungkin terdiri daripada berbilang tapak Contohnya, tapak web syarikat mungkin termasuk: tapak hadapan (memaparkan maklumat produk dan perkhidmatan syarikat), tapak pengurusan bahagian belakang (tapak web pengurusan yang digunakan secara dalaman oleh pekerja syarikat), dan laman web lain. Logik dan perniagaan setiap tapak adalah agak bebas.

  1. Kemahiran sokongan berbilang tapak

Dalam rangka kerja Django, menyokong berbilang tapak memerlukan beberapa kemahiran Berikut ialah beberapa kemahiran sokongan berbilang tapak biasa.

2.1 Tetapan tetapan dinamik.py

Setiap tapak mempunyai pengecam unik dalam Django Pengecam ini boleh menjadi sebahagian daripada nama domain tapak atau boleh ditentukan dengan cara lain. Satu cara untuk menetapkan settings.py secara dinamik ialah menambah pernyataan penghakiman if dalam fail settings.py dan tetapkan parameter settings.py secara dinamik mengikut pengecam unik tapak semasa, seperti DATABASES, STATIC_URL, dsb.

Sebagai contoh, kami boleh mencipta fail bernama site_settings.py yang mengandungi konfigurasi berbeza untuk tapak yang berbeza, contohnya:

# site1
SITE_CONFIG = {
    'database': {
        'ENGINE': 'django.db.backends.postgresql',
        'HOST': 'site1.db.server',
        'PORT': '5432',
        ...
    },
    'static_url': '/static/site1/',
    ...
}

# site2
SITE_CONFIG = {
    'database': {
        'ENGINE': 'django.db.backends.mysql',
        'HOST': 'site2.db.server',
        'PORT': '3306',
        ...
    },
    'static_url': '/static/site2/',
    ...
}

Kemudian, kami mencipta fail dalam fail settings.py kami Projek Django Import site_settings.py dan tetapkan parameter projek Django mengikut pengecam unik tapak semasa, iaitu:

from site_settings import SITE_CONFIG
import socket

current_site = ''

# 获取当前站点唯一标识符
if socket.gethostbyname(socket.gethostname()) == '127.0.0.1':
    current_site = 'site1'
else:
    current_site = 'site2'

# 动态设置settings.py中的参数
DATABASES = SITE_CONFIG[current_site]['database']
STATIC_URL = SITE_CONFIG[current_site]['static_url']
...

Dengan cara ini, tapak yang berbeza boleh menggunakan pangkalan data yang berbeza, URL fail statik dan lain-lain konfigurasi.

2.2 Gunakan nama subdomain untuk melaksanakan berbilang tapak

Selain menetapkan settings.py secara dinamik, nama subdomain juga merupakan kaedah biasa untuk melaksanakan berbilang tapak. Kami boleh menentukan tapak semasa melalui nama subdomain yang berbeza, dan kemudian menggunakan konfigurasi dan templat yang berbeza untuk mencapai kesan tapak yang berbeza.

Sebagai contoh, menggunakan modul django-hosts dalam Django, kita boleh mencipta sub-aplikasi yang berasingan untuk setiap subdomain. Apabila mengkonfigurasi Url dan paparan, tentukan nama subdomain yang diminta pada masa ini dan padankan sub-aplikasi yang sepadan melalui nama subdomain yang diminta. Dalam sub-aplikasi, anda boleh menentukan penggunaan templat yang berbeza, direktori fail statik, pangkalan data, dsb.

2.3 Melaksanakan berbilang tapak menggunakan middleware

Dalam Django, middleware ialah fungsi yang mengendalikan permintaan dan respons. Middleware boleh mengubah suai permintaan dan respons, memintas permintaan dan bertindak balas dengan sewajarnya. Kami boleh menggunakan perisian tengah untuk mengendalikan permintaan daripada berbilang tapak dan menentukan tapak yang diminta pada masa ini berdasarkan nama domain dalam permintaan.

Sebagai contoh, kami boleh menyesuaikan perisian tengah untuk menentukan nama domain dalam permintaan dan memproses permintaan mengikut nama domain yang berbeza, contohnya:

class SiteMiddleware(object):
    def process_request(self, request):
        request.current_site = 'default'
        if request.META['HTTP_HOST'].startswith('site1.'):
            request.current_site = 'site1'
        elif request.META['HTTP_HOST'].startswith('site2.'):
            request.current_site = 'site2'
        else:
            request.current_site = 'default'
        return None

    def process_response(self, request, response):
        return response

Kemudian, dalam views.py, kami boleh berdasarkan request.current_site Untuk mengendalikan permintaan dan memuatkan templat, fail statik dan sumber lain yang sepadan.

  1. Ringkasan

Dalam rangka kerja Django, sokongan berbilang tapak ialah ciri yang sangat penting. Dalam aplikasi praktikal, kami boleh mencapai sokongan berbilang tapak dengan menetapkan settings.py secara dinamik, menggunakan nama subdomain, menulis middleware, dsb. Pembangun boleh memilih kaedah yang paling sesuai untuk pembangunan berdasarkan keperluan sebenar.

Atas ialah kandungan terperinci Petua sokongan berbilang tapak dalam rangka kerja Django. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn