Django有时会给404,有时会给200

时间:2017-12-03 15:21:08

标签: django websocket django-channels

在Django中使用相同的配置,访问相同的URL

http://<URL>/basic/insert/adafd

有时会给我404,而它会给我200以后。知道怎么会发生这种情况以及如何解决它?

(看起来在我尝试使用频道后发生)

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

urlpatterns = [
    url(r'^insert/(.*)$', views.insert),
    url(r'^list$', views.list),
]

其他代码如下:

def listfrom(request, last):
    stack = infoStack.objects.all()
    listing = []
    for info in stack:
        if info.id()>last:
            listing.append(info.as_dict())
            request.session['last'] = info.id() 
    return render(request, "basic/list.html", {"listings": json.dumps(listing)})

def list(request):  
    last = 0
    if request.session.keys():
        sid = request.session.session_key
        s = Session.objects.get(pk=sid)     
        last = s.get_decoded()['last']
    return listfrom(request, last)

def insert(request, info):
    ip = get_client_ip(request)
    q = infoStack()
    q.infoIP = ip
    q.infoText = info
    q.save()
    response = HttpResponse()
    response.status_code = 200
    return response

与频道相关的配置/代码如下:

@channel_session    
def ws_message(message):
    print "message"     

@channel_session
def ws_connect(message):
    print "connect"
    Group("wsg").add(message.reply_channel)
    message.reply_channel.send({"accept": True})        

@channel_session
def ws_disconnect(message):
    print "disconnect"
    Group("wsg").discard(message.reply_channel)


# routing.py
from basic.views import ws_message, ws_connect, ws_disconnect

channel_routing = {
    'websocket.connect': ws_connect,
    'websocket.receive': ws_message,
    'websocket.disconnect': ws_disconnect,
}

1 个答案:

答案 0 :(得分:0)

最终发现了一篇关于此事的帖子https://github.com/django/channels/issues/489

基本上,在我卸载了redis-server并重新安装后,问题就出现了。