Django聊天室(一)基础设置

 2018年5月8日 15:06   Nick王   开发    0 评论   164 浏览 

Django 版本:1.11.13
Django-Channels 版本:2.1.1
Python 版本:3.6.5

Django聊天室(一)基础设置

在这个教程我们会构建一个简单的web聊天室。这个聊天室包含两个页面:

  1. 一个index视图,在这个页面你可以输入你要加入的聊天室的名字。

  2. 一个room视图,让您看到在特定聊天室中发布的消息。

这个room视图,将使用WebSocket和Django服务器进行通信,并且会监听发布的任何消息。

在开始本教程之前,一定要先熟悉Django站点的构建。确保首先安装Django。

$ python3 -m django --version
1.11.13

创建一个项目和APP

$ django-admin startproject mysite


$ python manage.py startapp chat

创建完成之后,在settings.py中增加如下配置:

# Application definition

INSTALLED_APPS = [
    ……
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'chat',
    ……
]

编写index视图

现在我们将创建第一个视图,这个index视图允许你输入要加入的聊天室的名称。

创建HTML模板(chat/templates/chat/index.html):

<html>
<head>
    <meta charset="utf-8"/>
    <title>Chat Rooms</title>
</head>
<body>
    What chat room would you like to enter?<br/>
    <input id="room-name-input" type="text" size="100"/><br/>
    <input id="room-name-submit" type="button" value="Enter"/>
</body>
<script>
    document.querySelector('#room-name-input').focus();
    document.querySelector('#room-name-input').onkeyup = function(e) {
        if (e.keyCode === 13) {  // enter, return
            document.querySelector('#room-name-submit').click();
        }
    };
    document.querySelector('#room-name-submit').onclick = function(e) {
        var roomName = document.querySelector('#room-name-input').value;
        window.location.pathname = '/chat/' + roomName + '/';
    };
</script>
</html>

创建视图函数(chat/views.py):

from django.shortcuts import render


def index(request):
    return render(request, template_name='chat/index.html', context={})

配置路由(chat/urls.py):

from django.conf.urls import url
from chat import views

urlpatterns = [
    url(r'^$', views.index, name='index'),
]

配置根路由(mysite/urls.py):

from django.conf.urls import url
from django.conf.urls import include
from django.contrib import admin

urlpatterns = [
    url(r'^chat/', include('chat.urls')),
    url(r'^admin/', admin.site.urls),
]

启动服务器:

$ python manage.py runserver

整合Django-Channels

到目前为止,我们只是创建了一个简单的Django应用程序,根本还没有用到Channels。

首先使用pip进行安装:

$ pip install channels

安装完成之后,将Channels库添加到已安装应用程序的列表中。在settings.py中增加如下配置:

# Application definition

INSTALLED_APPS = [
    'channels',
    ……
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'chat',
    ……
]

特别注意: 为了避免冲突,把channels应该放置在最开头。

接下来为Channels创建一个默认路由(mysite/routing.py):

from channels.routing import ProtocolTypeRouter

application = ProtocolTypeRouter({
    # Empty for now (http->django views is added by default)
})

这个路由配置基本上跟Django的路由是类似的。当Channels服务接收到一个HTTP请求的时候,告诉Channels运行哪些代码。

最后,需要将通道指向根路由配置。在settings.py设置ASGI_APPLICATION为路由对象:

ASGI_APPLICATION = "mysite.routing.application"

一旦启用,channels将会将自己整合到Django中,并且会控制runserver命令。此时会用Channels开发服务器来替换标准的Django开发服务器。

最后来启动服务器,来验证Channels是否能正常工作:

$ python manage.py runserver
Performing system checks...

System check identified no issues (0 silenced).


May 07, 2018 - 06:34:42
Django version 1.11.13, using settings 'mysite.settings'
Starting ASGI/Channels version 2.1.1 development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
2018-05-07 06:34:42,011 - INFO - server - HTTP/2 support not enabled (install the http2 and tls Twisted extras)
2018-05-07 06:34:42,011 - INFO - server - Configuring endpoint tcp:port=8000:interface=127.0.0.1
2018-05-07 06:34:42,012 - INFO - server - Listening on TCP address 127.0.0.1:8000


AA


如无特殊说明,文章均为本站原创,转载请注明出处