Предпоставки
Преди да практикувате скрипта, показан в този урок, не забравяйте да изпълните следните задачи.
- Инсталирайте Django версия 3+ на Ubuntu 20+ (за предпочитане)
- Създайте проект на Django
- Стартирайте сървъра Django, за да проверите дали сървърът работи правилно
Настройте приложение Django
Изпълнете следната команда, за да създадете приложение на Django с име socketapp:
$ python3 управлява.py startapp socketappИзпълнете следната команда, за да инсталирате канала:
$ pip канали за инсталиранеДобавете каналите и името на приложението към INSTALLED_APP част от настройки.py файл:
INSTALLED_APPS = [..
„канали“,
„socketapp“
]
Дефинирайте стойността на ASGI_APPLICATION в настройки.py файл:
ASGI_APPLICATION = 'channel_pro.asgi.приложение'Създайте папка с име шаблони вътре в socketapp папка и задайте местоположението на шаблона на приложението в ШАБЛОНИ част от настройки.py файл:
ШАБЛОНИ = [.. .
'DIRS': ['/ home / fahmida / channel_pro / socketapp / templates'],
.. .
,
]
Следният изход ще се появи в терминала след стартиране на Django сървъра. Резултатът показва, че ASGI / Канали версия 3.0.3 работи.
Създайте файл с шаблон с име индекс.html в дефинираното местоположение на шаблона за показване на данните, изпратени от WebSocket. Обектът на сокет, създаден с помощта на JavaScript, ще чете данните с помощта на JSON.parse () метод, след което предайте стойността в съдържанието на
таг, който съдържа стойността на ID, 'msg.'
индекс.html
текст
Променете мнения.py файл на socketapp със следното съдържание. The индекс.html файлът на шаблона ще се покаже в браузъра с текст променлива, когато индекс () метод на този скрипт се извиква от URL адреси.py файл. Ако от гнездото не се предава съобщение, тогава текстът 'LinuxHintще се покаже в браузъра.
мнения.py
# Импортиране на модул за рендиране от Djangoот django.преки пътища за импортиране
# Създайте функция за индекс за показване на HTML файла в браузъра
def index (заявка):
return render (заявка, "индекс.html ", context = 'text': 'LinuxHint')
Променете URL адреси.py файл на socketapp със следното съдържание. В скрипта са дефинирани два пътя:администратор /'пътят се използва за отваряне на таблото за управление на администрацията на Django и'съобщение /'path се използва за четене на съобщението WebSocket.
URL адреси.py
от django.принос вноса администраторот django.път за импортиране на URL адреси
от изгледи за импортиране на socketapp
urlpatterns = [
път ('admin /', admin.сайт.URL адреси),
path ('msg /', изгледи.индекс)
]
Когато се изпълни следният URL, без да се дефинират потребителските и маршрутизиращите файлове, HTTP протоколът ще работи и ще се появи следният изход.
http: // localhost: 8000 / msg
Сега създайте a потребителите.py файл в socketapp папка със следния скрипт. The свързване () метод на ws_consumer ще се използва за приемане на връзката на сокета, четене на текущата стойност на времето всяка секунда и изпращане на текущото време във формат JSON чрез WebSocket, когато този метод бъде извикан от маршрутизиращия файл.
потребителите.py
# Импортиране на JSON модулимпортиране json
# Импортиране на WebsocketConsumer
от канали.родово.импортиране на Websocket
# Импортиране на модул за дата и час
от datetime импортиране datetime
# Импортиране на модул за заспиване
от време внос сън
# Определете потребителския клас за изпращане на данните чрез WebsocketConsumer
клас ws_consumer (WebsocketConsumer):
def свързване (самостоятелно):
себе си.приемете ()
while (Вярно):
сега = дата и час.сега()
себе си.изпрати (json.сметища ('timeValue': сега.strftime ("% H:% M:% S")))
сън (1)
Създайте маршрутизиране.py вътре в socketapp папка със следния скрипт. "съобщение /'пътят е дефиниран в скрипта за извикване на потребителя за изпращане на данните в сокета.
маршрутизиране.py
от django.път за импортиране на URL адресиот .потребителите внасят ws_consumer
# Задайте пътя за извикване на потребителя
ws_urlpatterns = [
path ('msg /', ws_consumer.as_asgi ())
]
Променете asgi.py файл със следния скрипт. Модулите, които са необходими за обработка на HTTP и WebSocket заявки, се импортират в скрипта.
asgi.py
# Импортиране на модул osвнос os
# Импортирайте get_asgi_application за обработка на http протокол
от django.ядро.asgi импортиране get_asgi_application
# Импортирайте ProtocolTypeRouter и URLRouter, за да зададете маршрутизацията на уебсайта
от канали.маршрутизиране импортиране ProtocolTypeRouter, URLRouter
# Импортирайте AuthMiddlewareStack за обработка на уебсайтове
от канали.auth импортиране AuthMiddlewareStack
# Импортиране на маршрутизиране на уебсайтове
от socketapp.маршрутизиране внос ws_urlpatterns
# Присвояване на стойност за DJANGO_SETTINGS_MODULE
операционна система.среда.setdefault ('DJANGO_SETTINGS_MODULE', 'channel_pro.настройки')
# Определете променливата на приложението за обработка на http и websocket
application = ProtocolTypeRouter (
„http“: get_asgi_application (),
„websocket“: AuthMiddlewareStack (URLRouter (ws_urlpatterns))
)
Сега отново стартирайте следния URL от браузъра, за да прочетете данните от WebSocket.
http: // localhost: 8000 / msg /
Ако потребителят и рутерът работят правилно, следният цифров часовник ще се покаже в браузъра. Тук рутерът е изпратил заявката WebSocket, използвайки 'съобщение /'път до потребителя, който е приел заявката и е изпратил данните към шаблона, за да покаже цифровия часовник в браузъра, където втората стойност на текущото време се актуализира всяка секунда.
Заключение
Този урок ви показа как да внедрите приложение в реално време, използвайки рамката и каналите на Django, като създадете прост цифров часовник. Други видове приложения в реално време също могат да бъдат внедрени с помощта на Django и канали, като системи за онлайн чат. Скриптовете, използвани в този урок, работят само за версии на Django 3+ и Channel версии 3+. Така че, ако използвате по-ранна версия на Django или Channel, ще трябва да надстроите версията, преди да тествате скрипта, предоставен в този урок.