تصویر مقاله دسترسی دیگران به سایت شما در لپ‌تاپ شما

دسترسی دیگران به سایت شما در لپ‌تاپ شما

خلاصه:

در این آموزش یاد می‌گیریم چطور با پیدا کردن IP محلی، تنظیم ALLOWED_HOSTS و اجرای Django روی 0.0.0.0، سایت Django روی لپ‌تاپ را از گوشی یا کامپیوتر دیگری در همان Wi-Fi باز کنیم.

مقاله آموزشی۱۴۰۵/۰۵/۱۶ ۱۶:۴۰24 دقیقه3 نظر
۱۲۲ بازدید

اگر یک پروژه Django را روی لپ‌تاپ خودت اجرا کرده باشی، احتمالاً همیشه برای دیدن آن آدرسی مثل زیر را در مرورگر باز می‌کنی:

Plain text
http://127.0.0.1:8000

یا:

Plain text
http://localhost:8000

اما فرض کن در دانشگاه، شرکت، کلاس یا حتی یک جمع دوستانه هستی و می‌خواهی شخص دیگری با موبایل یا لپ‌تاپ خودش سایت Django تو را ببیند.

مثلاً پروژه روی لپ‌تاپ تو اجرا شده و دوستت می‌خواهد با گوشی خودش وارد آن شود.

لازم نیست پروژه را روی هاست یا سرور اینترنتی آپلود کنی. اگر هر دو دستگاه به یک شبکه محلی متصل باشند، می‌توانی پروژه Django را مستقیماً از لپ‌تاپ خودت در اختیار دستگاه‌های دیگر همان شبکه قرار بدهی.

در این آموزش می‌بینیم چطور:

  • IP محلی لپ‌تاپ را پیدا کنیم.
  • دستگاه‌ها را روی یک شبکه قرار دهیم.
  • IP را به ALLOWED_HOSTS اضافه کنیم.
  • Django را روی 0.0.0.0 اجرا کنیم.
  • سایت را از موبایل یا لپ‌تاپ دیگری باز کنیم.
  • مشکلات رایج مثل Firewall را برطرف کنیم.

ایده اصلی این کار چیست؟

به‌صورت معمول وقتی دستور زیر را اجرا می‌کنی:

Bash / Shell
python manage.py runserver

سرور توسعه Django به‌صورت پیش‌فرض روی آدرس 127.0.0.1 و پورت 8000 اجرا می‌شود.

مشکل اینجاست که 127.0.0.1 یا localhost فقط از همان دستگاه قابل دسترسی است. طبق مستندات Django، برای اینکه development server از دستگاه‌های دیگر شبکه قابل مشاهده باشد، می‌توان آن را روی IP شبکه یا آدرس 0.0.0.0 اجرا کرد.

ما در این مقاله Django را این‌طور اجرا می‌کنیم:

Bash / Shell
python manage.py runserver 0.0.0.0:8000

با این کار Django روی تمام رابط‌های شبکه IPv4 لپ‌تاپ منتظر اتصال می‌ماند.

اما یک نکته بسیار مهم وجود دارد:

نباید 0.0.0.0:8000 را داخل مرورگر گوشی وارد کنیم.

دستگاه‌های دیگر باید IP محلی لپ‌تاپ ما را وارد کنند.

مثلاً اگر IP لپ‌تاپ این باشد:

192.168.1.20

آدرس سایت برای بقیه دستگاه‌ها می‌شود:

Plain text
http://192.168.1.20:8000

در ادامه تمام مراحل را انجام می‌دهیم.

مرحله اول: همه دستگاه‌ها باید به یک شبکه متصل باشند

اولین شرط این است که لپ‌تاپی که Django روی آن اجرا می‌شود و دستگاهی که قرار است سایت را باز کند، داخل یک شبکه باشند.

مثلاً:

در حال بارگذاری تصویر...

همه دستگاه‌ها به یک روتر Wi-Fi متصل هستند

هر سه دستگاه به یک Wi-Fi متصل هستند.

لزومی ندارد اینترنت داشته باشید. چیزی که برای ما اهمیت دارد این است که دستگاه‌ها بتوانند در Local Network یا LAN با یکدیگر ارتباط برقرار کنند.

یک نکته درباره Guest Wi-Fi

بعضی مودم‌ها در شبکه Guest قابلیتی به نام‌هایی مثل:

  • AP Isolation

  • Client Isolation

  • Wireless Isolation

دارند.

در این حالت ممکن است دو دستگاه با اینکه به یک Wi-Fi متصل‌اند، اجازه ارتباط مستقیم با یکدیگر را نداشته باشند.

پس اگر مراحل مقاله را درست انجام دادی ولی دستگاه دیگر همچنان نمی‌تواند به لپ‌تاپ وصل شود، تنظیمات مودم یا Guest Network را هم بررسی کن.

مرحله دوم: پیدا کردن IP محلی لپ‌تاپ

حالا باید IP لپ‌تاپی را پیدا کنیم که پروژه Django روی آن اجرا می‌شود.

IP موردنظر ما Public IP اینترنت نیست. دنبال IP داخل شبکه یا همان Private/Local IP هستیم.

این IP معمولاً شکلی شبیه این دارد:

192.168.1.20

یا:

192.168.0.15

گاهی هم ممکن است مثلاً به این شکل باشد:

10.0.0.12

روش پیدا کردن آن در هر سیستم‌عامل کمی متفاوت است.

پیدا کردن IP محلی در Windows

در ویندوز می‌توانیم خیلی سریع از دستور ipconfig استفاده کنیم.

Command Prompt، PowerShell یا Windows Terminal را باز کن و دستور زیر را اجرا کن:

Bash / Shell
ipconfig

مایکروسافت نیز ipconfig را ابزاری برای نمایش تنظیمات فعلی TCP/IP از جمله IPv4 معرفی می‌کند.

خروجی ممکن است چیزی شبیه این باشد:

Bash / Shell
Wireless LAN adapter Wi-Fi:
 
IPv4 Address. . . . . . . . . . . : 192.168.1.20
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 192.168.1.1

اگر از Wi-Fi استفاده می‌کنی، قسمت مربوط به:

Wireless LAN adapter Wi-Fi

را پیدا کن.

مقدار روبه‌روی:

IPv4 Address

همان IP موردنیاز ما است.

در این مثال:

192.168.1.20

IP لپ‌تاپ ما است.

ممکن است چند Network Adapter در خروجی وجود داشته باشد. بنابراین IP مربوط به اتصال فعالی را انتخاب کن که دستگاه دیگر نیز از طریق همان شبکه قرار است به تو متصل شود.

پیدا کردن IP محلی در macOS

در macOS ساده‌ترین روش گرافیکی این است که وارد:

Bash / Shell
System Settings
→ Network
→ Wi-Fi
→ Details
→ TCP/IP

شوی.

در این قسمت IPv4 Address سیستم نمایش داده می‌شود. مستندات Apple نیز مسیر Network و بخش TCP/IP را برای مشاهده و مدیریت IPv4 توضیح می‌دهد.

اگر Terminal را ترجیح می‌دهی، روی بسیاری از MacBookها می‌توانی از دستور زیر استفاده کنی:

Bash / Shell
ipconfig getifaddr en0

برای مثال خروجی ممکن است فقط این باشد:

192.168.1.20

در بعضی سیستم‌ها نام Interface می‌تواند متفاوت باشد. اگر دستور بالا خروجی نداشت، می‌توانی تنظیمات Network را بررسی کنی یا ابتدا Interface فعال سیستم را پیدا کنی.

پیدا کردن IP محلی در Linux

در بیشتر توزیع‌های جدید لینوکس می‌توانیم از دستور ip استفاده کنیم:

Bash / Shell
ip addr

دنبال Interface فعال شبکه بگرد.

برای Wi-Fi ممکن است نام Interface چیزی شبیه این باشد:

wlan0

یا:

wlp2s0

و برای Ethernet ممکن است چیزی شبیه این ببینی:

eth0

یا:

enp3s0

در قسمت مربوط به Interface فعال، خط inet را پیدا کن:

Bash / Shell
inet 192.168.1.20/24

در این مثال IP سیستم ما برابر است با:

192.168.1.20

دستور ip address بخشی از ابزارهای استاندارد iproute2 برای مشاهده و مدیریت آدرس‌های شبکه در لینوکس است.

اگر می‌خواهی خروجی جمع‌وجورتری ببینی، می‌توانی بنویسی:

Bash / Shell
ip -4 addr

گزینه -4 باعث می‌شود فقط اطلاعات IPv4 نمایش داده شوند.

تا اینجا چه چیزی داریم؟

فرض کنیم IP لپ‌تاپ ما در شبکه این است:

192.168.1.20

پروژه Django هم قرار است روی پورت:

8000

اجرا شود.

در نتیجه آدرس نهایی سایت برای دستگاه‌های دیگر قرار است این باشد:

Plain text
http://192.168.1.20:8000

اما هنوز دو کار مهم باقی مانده است:

  1. اضافه کردن IP به ALLOWED_HOSTS
  2. اجرای Django روی 0.0.0.0

مرحله سوم: اضافه کردن IP به ALLOWED_HOSTS

قبل از اجرای پروژه، فایل:

settings.py

را باز کن.

احتمالاً تنظیمی شبیه این داری:

Python
ALLOWED_HOSTS = []

IP محلی لپ‌تاپت را به آن اضافه کن:

Python
ALLOWED_HOSTS = [
    "192.168.1.20",
]

اگر می‌خواهی همچنان با localhost و 127.0.0.1 هم پروژه را باز کنی، می‌توانی بنویسی:

Python
ALLOWED_HOSTS = [
    "localhost",
    "127.0.0.1",
    "192.168.1.20",
]

طبق مستندات Django، ALLOWED_HOSTS مشخص می‌کند سایت اجازه پاسخ‌گویی به چه Hostهایی را دارد. اگر Host درخواست با مقادیر مجاز تطبیق نداشته باشد، Django درخواست را رد می‌کند.

پورت را داخل ALLOWED_HOSTS ننویس

این اشتباه است:

Python
ALLOWED_HOSTS = [
    "192.168.1.20:8000",
]

حالت صحیح:

Python
ALLOWED_HOSTS = [
    "192.168.1.20",
]

ALLOWED_HOSTS برای Host است و پورت جزو مقداری نیست که باید اینجا قرار بدهیم؛ مستندات Django نیز توضیح می‌دهد تطبیق Host بدون در نظر گرفتن Port انجام می‌شود.

آیا می‌توانیم از ستاره استفاده کنیم؟

از نظر فنی می‌توان چنین کاری انجام داد:

Python
ALLOWED_HOSTS = ["*"]

اما برای این آموزش نیازی به باز کردن تمام Hostها نداریم.

بهتر است همان IP مشخص شبکه را وارد کنیم:

Python
ALLOWED_HOSTS = [
    "192.168.1.20",
]

مستندات Django تأکید می‌کند که استفاده از * تمام Hostها را قبول می‌کند و در آن حالت مسئولیت اعتبارسنجی Host بر عهده برنامه خواهد بود.

پس برای یک تست ساده داخل شبکه، استفاده از IP مشخص انتخاب بهتری است.

مرحله چهارم: اجرای Django روی 0.0.0.0

اگر Django را به‌شکل معمول اجرا کنیم:

Bash / Shell
python manage.py runserver

سرور به‌صورت پیش‌فرض روی:

Plain text
127.0.0.1:8000

بالا می‌آید.

127.0.0.1 فقط روی دستگاه خودمان قابل دسترسی است.

برای اینکه دستگاه‌های دیگر شبکه هم بتوانند به سرور وصل شوند، دستور را این‌طور اجرا می‌کنیم:

Bash / Shell
python manage.py runserver 0.0.0.0:8000

اگر همه‌چیز درست باشد، خروجی‌ای شبیه این خواهی دید:

Plain text
Starting development server at http://0.0.0.0:8000/

Django به‌صورت رسمی نیز استفاده از 0.0.0.0 را یکی از روش‌های در دسترس قرار دادن development server برای دستگاه‌های دیگر شبکه معرفی می‌کند.

0.0.0.0 دقیقاً یعنی چه؟

در اینجا 0.0.0.0 تقریباً یعنی:

روی تمام Interfaceهای IPv4 این سیستم منتظر اتصال باش.

برای همین درخواست‌هایی که از طریق IP وای‌فای لپ‌تاپ به پورت 8000 می‌رسند، توسط Django دریافت می‌شوند.

این موضوع را با آدرس سایت اشتباه نکن.

اگر IP لپ‌تاپ:

192.168.1.20

باشد، شخص دیگر نباید این را بزند:

Plain text
http://0.0.0.0:8000

بلکه باید این آدرس را وارد کند:

Plain text
http://192.168.1.20:8000

مرحله پنجم: سایت را از دستگاه دیگر باز کنید

حالا سرور Django روی لپ‌تاپ اصلی اجرا شده است.

فرض کنیم:

Bash / Shell
IP = 192.168.1.20
Port = 8000

در موبایل یا لپ‌تاپ دیگری که به همان Wi-Fi متصل است، مرورگر را باز کن و بنویس:

Plain text
http://192.168.1.20:8000

اگر تنظیمات درست باشند، سایت Django تو باز می‌شود.

حالا در واقع این اتفاق افتاده است:

Bash / Shell
موبایل
|
| درخواست HTTP
192.168.1.20:8000
|
لپ‌تاپ شما
|
Django Development Server
|
سایت

مهم نیست دستگاه دوم Android، iPhone، Windows، Linux یا macOS باشد. تا زمانی که مرورگر داشته باشد و بتواند در شبکه به لپ‌تاپ تو دسترسی پیدا کند، می‌تواند سایت را باز کند.

یک مثال کامل

فرض کنیم یک پروژه Django داری و IP لپ‌تاپت را پیدا کرده‌ای:

192.168.1.35

قدم اول: settings.py

داخل settings.py می‌نویسی:

Python
ALLOWED_HOSTS = [
    "localhost",
    "127.0.0.1",
    "192.168.1.35",
]

قدم دوم: اجرای سرور

در پوشه پروژه اجرا می‌کنی:

Bash / Shell
python manage.py runserver 0.0.0.0:8000

قدم سوم: اتصال موبایل

موبایل را به همان Wi-Fi متصل می‌کنی و در مرورگر می‌نویسی:

Plain text
http://192.168.1.35:8000

تمام!

پروژه‌ای که روی لپ‌تاپ تو اجرا می‌شود حالا از طریق موبایل قابل مشاهده است.

آیا می‌توانیم پورت دیگری انتخاب کنیم؟

بله.

مجبور نیستی از 8000 استفاده کنی.

مثلاً اگر بخواهی پروژه روی پورت 5000 اجرا شود:

Bash / Shell
python manage.py runserver 0.0.0.0:5000

در این حالت دستگاه‌های دیگر باید وارد این آدرس شوند:

Plain text
http://192.168.1.20:5000

یا مثلاً برای پورت 8080:

Bash / Shell
python manage.py runserver 0.0.0.0:8080

و آدرس مرورگر می‌شود:

Plain text
http://192.168.1.20:8080

پس فرمول ساده است:

Plain text
http://LOCAL_IP:PORT

برای مثال:

Plain text
http://192.168.1.20:8000

اگر سایت باز نشد چه کار کنیم؟

اگر تمام مراحل را انجام دادی ولی روی گوشی یا لپ‌تاپ دیگر سایت باز نشد، چند مورد را بررسی کن.

1. مطمئن شو هر دو دستگاه روی یک شبکه هستند

برای مثال نباید لپ‌تاپ به Wi-Fi خانه وصل باشد ولی گوشی از اینترنت سیم‌کارت استفاده کند.

Wi-Fi گوشی را بررسی کن و مطمئن شو همان شبکه لپ‌تاپ است.

2. مطمئن شو IP را درست انتخاب کرده‌ای

بعضی سیستم‌ها چند IP مختلف دارند.

مثلاً ممکن است خروجی شامل Adapterهای مربوط به:

  • Wi-Fi
  • Ethernet
  • Docker
  • VPN
  • ماشین مجازی
  • WSL

باشد.

IP مربوط به شبکه‌ای را انتخاب کن که دستگاه دیگر هم به آن متصل است.

3. ALLOWED_HOSTS را بررسی کن

اگر IP لپ‌تاپ:

192.168.1.20

است، باید چیزی شبیه این داشته باشی:

Python
ALLOWED_HOSTS = [
    "192.168.1.20",
]

نه:

Python
ALLOWED_HOSTS = [
    "192.168.1.20:8000",
]

4. مطمئن شو Django روی 0.0.0.0 اجرا شده

این:

Bash / Shell
python manage.py runserver

برای هدف ما کافی نیست.

از این استفاده کن:

Bash / Shell
python manage.py runserver 0.0.0.0:8000

Django نیز در مستنداتش توضیح می‌دهد 127.0.0.1 پیش‌فرض از سیستم‌های دیگر شبکه قابل دسترسی نیست.

مشکل Firewall

یکی از رایج‌ترین دلایلی که باعث می‌شود سایت روی لپ‌تاپ خودت باز شود ولی روی موبایل باز نشود، Firewall است.

سیستم‌عامل ممکن است اتصال ورودی به Python یا پورت 8000 را مسدود کرده باشد.

Firewall در Windows

وقتی برای اولین بار Python شروع به دریافت اتصال شبکه کند، ممکن است Windows Defender Firewall پنجره‌ای نمایش دهد و از تو بپرسد آیا اجازه دسترسی داده شود یا نه.

اگر روی شبکه قابل اعتماد هستی، دسترسی Python را برای Private Networks مجاز کن.

اگر قبلاً آن را Block کرده‌ای، تنظیمات Windows Firewall را بررسی کن و مطمئن شو Python یا پورت موردنظر اجازه اتصال ورودی دارد.

Firewall در Linux

اگر از ufw استفاده می‌کنی، وضعیتش را بررسی کن:

Bash / Shell
sudo ufw status

اگر فعال است و پورت 8000 مسدود شده، برای یک شبکه قابل اعتماد می‌توانی اجازه دسترسی به این پورت بدهی:

Bash / Shell
sudo ufw allow 8000/tcp

بعد از پایان تست و در صورتی که دیگر به Rule نیاز نداری، می‌توانی آن را حذف کنی.

Firewall در macOS

اگر Firewall سیستم فعال است و اتصال مسدود می‌شود، بخش Firewall در تنظیمات macOS را بررسی کن و در صورت نیاز اجازه دریافت اتصال شبکه را به Python یا Terminal مربوطه بده.

یک روش ساده برای پیدا کردن محل مشکل

اگر سایت روی دستگاه دیگر باز نمی‌شود، مشکل را مرحله‌به‌مرحله پیدا کن.

اول روی خود لپ‌تاپ میزبان باز کن:

Plain text
http://127.0.0.1:8000

اگر باز شد، یعنی خود Django به احتمال زیاد درست اجرا شده است.

بعد روی همان لپ‌تاپ امتحان کن:

Plain text
http://192.168.1.20:8000

اگر این هم باز شد، یعنی Django روی Interface شبکه پاسخ می‌دهد.

حالا همین آدرس را روی موبایل باز کن:

Plain text
http://192.168.1.20:8000

اگر فقط مرحله آخر کار نکرد، احتمالاً مشکل مربوط به یکی از این موارد است:

Bash / Shell
Firewall
Network Isolation
اشتباه بودن شبکه
اشتباه بودن IP

این روش خیلی سریع مشخص می‌کند مشکل مربوط به Django است یا شبکه.

اگر IP لپ‌تاپ تغییر کرد چه می‌شود؟

در بیشتر شبکه‌های خانگی IP دستگاه‌ها توسط DHCP تعیین می‌شود.

در نتیجه ممکن است امروز IP لپ‌تاپ تو این باشد:

192.168.1.20

ولی بعد از reconnect شدن به Wi-Fi یا راه‌اندازی دوباره مودم تبدیل شود به:

192.168.1.24

در این شرایط باید آدرس جدید را پیدا کنی.

سپس در صورت نیاز ALLOWED_HOSTS را هم تغییر بدهی:

Python
ALLOWED_HOSTS = [
    "192.168.1.24",
]

و دستگاه دیگر نیز باید وارد آدرس جدید شود:

Plain text
http://192.168.1.24:8000

پس اگر روشی که قبلاً کار می‌کرد ناگهان از کار افتاد، یکی از اولین چیزهایی که باید بررسی کنی Local IP لپ‌تاپ است.

چرا localhost روی موبایل کار نمی‌کند؟

این یکی از نکاتی است که ممکن است در ابتدا کمی گیج‌کننده باشد.

فرض کن روی لپ‌تاپ سایت در این آدرس باز می‌شود:

Plain text
http://localhost:8000

اگر همین آدرس را روی موبایل وارد کنی، موبایل دنبال پورت 8000 روی خود موبایل می‌گردد.

localhost همیشه به همان دستگاهی اشاره می‌کند که درخواست از روی آن اجرا شده است.

بنابراین:

روی لپ‌تاپ:

Plain text
localhost = لپ‌تاپ

روی موبایل:

Plain text
localhost = موبایل

به همین دلیل باید روی موبایل IP لپ‌تاپ را وارد کنیم:

Plain text
http://192.168.1.20:8000

نه:

Plain text
http://localhost:8000

تفاوت 127.0.0.1، 0.0.0.0 و IP شبکه

برای اینکه موضوع کاملاً روشن شود، این سه آدرس را از هم جدا کنیم.

127.0.0.1

آدرس Loopback سیستم است.

127.0.0.1

فقط همان سیستم می‌تواند از طریق آن به خودش دسترسی داشته باشد.

مثلاً:

Plain text
http://127.0.0.1:8000

0.0.0.0

هنگام اجرای سرور از آن استفاده می‌کنیم:

Bash / Shell
python manage.py runserver 0.0.0.0:8000

یعنی Django روی Interfaceهای شبکه IPv4 برای اتصال آماده باشد.

معمولاً قرار نیست 0.0.0.0 را به کاربر دیگری بدهیم.

192.168.x.x یا IP شبکه

این همان IP واقعی لپ‌تاپ داخل شبکه محلی است.

مثلاً:

192.168.1.20

همین آدرس را دستگاه دیگر استفاده می‌کند:

Plain text
http://192.168.1.20:8000

پس به‌صورت خلاصه:

آدرسکاربرد

127.0.0.1

دسترسی فقط از همان سیستم

0.0.0.0

Bind کردن سرور روی Interfaceهای شبکه

192.168.1.20

آدرسی که دستگاه دیگر برای اتصال استفاده می‌کند

آیا این روش برای Production مناسب است؟

خیر.

روشی که در این مقاله استفاده کردیم برای کارهایی مثل:

  • تست پروژه
  • نمایش پروژه به دوست یا همکار
  • بررسی سایت روی موبایل واقعی
  • تست Responsive بودن سایت
  • پروژه‌های کلاسی
  • دمو در یک شبکه محلی
  • توسعه و Debug

بسیار کاربردی است.

اما Django صراحتاً تأکید می‌کند development server مربوط به runserver برای Production طراحی نشده و نباید به‌عنوان وب‌سرور نهایی سایت استفاده شود.

همچنین اگر DEBUG=True باشد، اطلاعات خطا و جزئیات محیط توسعه می‌توانند در صفحات Debug نمایش داده شوند؛ بنابراین چنین محیطی را روی شبکه‌های ناشناس یا در دسترس اینترنت قرار نده. مستندات Django نیز درباره نمایش اطلاعات محیط در حالت Debug هشدار می‌دهد.

بهتر است این روش را فقط روی شبکه‌ای که به آن اعتماد داری استفاده کنی.

خلاصه مراحل

برای اینکه شخص دیگری در همان Wi-Fi بتواند سایت Django اجراشده روی لپ‌تاپ تو را باز کند، کافی است این مراحل را انجام دهی:

1. هر دو دستگاه را به یک شبکه متصل کن.

2. IP محلی لپ‌تاپ را پیدا کن.

Windows:

Bash / Shell
ipconfig

Linux:

Bash / Shell
ip -4 addr

macOS:

Bash / Shell
ipconfig getifaddr en0

فرض کنیم IP این شد:

192.168.1.20

3. IP را به ALLOWED_HOSTS اضافه کن.

Python
ALLOWED_HOSTS = [
    "localhost",
    "127.0.0.1",
    "192.168.1.20",
]

4. Django را روی 0.0.0.0 اجرا کن.

Bash / Shell
python manage.py runserver 0.0.0.0:8000

5. روی دستگاه دیگر این آدرس را باز کن.

Plain text
http://192.168.1.20:8000

اگر باز نشد، Firewall، شبکه Wi-Fi، IP و ALLOWED_HOSTS را بررسی کن.

جمع‌بندی

برای اینکه دیگران سایت Django در حال اجرای روی لپ‌تاپ تو را ببینند، لازم نیست همیشه پروژه را Deploy کنی یا روی یک سرور اینترنتی قرار بدهی.

اگر دستگاه‌ها داخل یک شبکه باشند، لپ‌تاپ تو می‌تواند موقتاً نقش سرور را داشته باشد.

سه بخش اصلی این روش عبارت‌اند از:

Bash / Shell
پیدا کردن Local IP
اضافه کردن IP به ALLOWED_HOSTS
اجرای Django روی 0.0.0.0

بعد از آن هر دستگاه دیگری در همان شبکه می‌تواند با آدرس:

Plain text
http://LOCAL_IP:PORT

به پروژه دسترسی داشته باشد.

مثلاً:

Plain text
http://192.168.1.20:8000

این روش مخصوصاً زمانی بسیار کاربردی است که بخواهی سایت را روی موبایل واقعی آزمایش کنی، پروژه‌ات را سریع به شخص دیگری نشان بدهی یا بدون Deploy کردن سایت، آن را بین چند دستگاه داخل یک شبکه اجرا کنی.

سوالات متداول

آیا گوشی و لپ‌تاپ حتماً باید به اینترنت وصل باشند؟

نه. چیزی که اهمیت دارد این است که هر دو دستگاه داخل یک شبکه محلی باشند و بتوانند با یکدیگر ارتباط برقرار کنند. حتی یک شبکه بدون دسترسی به اینترنت هم می‌تواند برای این کار کافی باشد.

چرا سایت با localhost روی لپ‌تاپ باز می‌شود ولی روی گوشی نه؟

چون localhost در گوشی به خود گوشی اشاره می‌کند، نه لپ‌تاپ تو. باید IP شبکه لپ‌تاپ را وارد کنی.

مثلاً:

Plain text
http://192.168.1.20:8000

چرا باید Django را روی 0.0.0.0 اجرا کنیم؟

چون runserver به‌صورت پیش‌فرض روی 127.0.0.1 اجرا می‌شود که از دستگاه‌های دیگر شبکه قابل دسترسی نیست. 0.0.0.0 باعث می‌شود سرور روی رابط‌های IPv4 سیستم برای دریافت اتصال آماده باشد.

آیا باید پورت را داخل ALLOWED_HOSTS بنویسیم؟

خیر.

صحیح:

Python
ALLOWED_HOSTS = ["192.168.1.20"]

اشتباه:

Python
ALLOWED_HOSTS = ["192.168.1.20:8000"]

چرا بعد از چند روز آدرس قبلی دیگر کار نمی‌کند؟

احتمال دارد مودم از طریق DHCP یک IP جدید به لپ‌تاپ داده باشد. Local IP را دوباره بررسی کن و آدرس جدید را استفاده کن.

آیا می‌توانم به‌جای 8000 از پورت دیگری استفاده کنم؟

بله. مثلاً:

Bash / Shell
python manage.py runserver 0.0.0.0:8080

سپس دستگاه دیگر وارد می‌شود:

Plain text
http://192.168.1.20:8080

اشتراک‌گذاری

لینک را کپی کنید یا مقاله را در تلگرام، واتساپ و لینکدین بفرستید.

نویسنده
م

محمدهادی حاجی‌حسینی

نویسنده مقالات آموزشی کدینگ‌یار

دوره‌های مرتبط

یادگیری عمیق‌تر با دوره‌های پروژه‌محور

مقالات VIP

در هر دوره‌ای شرکت کنید، به محتوای اختصاصی همان دوره دسترسی پیدا می‌کنید.