дампы simplejson в API канала Google App Engine - PullRequest
0 голосов
/ 13 августа 2011

Я пытаюсь использовать Channel API с моим проектом Google App Engine django-nonrel.Согласно моему текущему требованию, я хочу отправить список всех пользователей, которые находятся на определенной странице, скажем group_mainpage.html, всем остальным пользователям, которые находятся на той же странице.Другими словами, если мы оба на этой странице, мы оба можем видеть наши имена где-то в углу этой страницы.Как только пользователи переходят со страницы, их имена должны быть удалены из списка.Но я не могу сделать JSON из этого правильно и отобразить его.До сих пор я делал так, но это не работает:

group_mainpage.html

<html>
    <head>
    </head>
    <body>
        <div id="channel_api_params" style="display:none;" chat_token="{{chat_token}}" channel_id="{{channel_id}}"></div>
        <div align="center"><font size="5" color="blue">Welcome To Group Main Page</font><br><br>
        </div>
        <div align="center">
            <form method="POST" action="/group_start/">
                <input type='submit' value="Start">
            </form>
            <div id="mydiv">
            {% include 'user_list.html' %}
            </div>
        </div>
        <script type="text/javascript" src="/media/jquery.js"></script>
        <script type="text/javascript" src="/_ah/channel/jsapi"></script>
        <script type="text/javascript">
        $(document).ready(function(){
            $(window).load(function(){
                var channel_id = $('#channel_api_params').attr('channel_id');
                $.ajax({
                    url: '/valid_group_users/',
                    type: 'GET',
                    data:{
                        'channel_id':channel_id,
                    },
                    success: function(current_user){
                    },
                    complete: function(){
                    }
                });

                var chat_token = $('#channel_api_params').attr('chat_token');
                var channel = new goog.appengine.Channel(chat_token);
                var socket = channel.open();
                socket.onopen = function(){
                };
                socket.onmessage = function(m){
                    var data = $.parseJSON(m.data);
                    $('#mydiv').append(data['post_element']);
                };
                socket.onerror =  function(err){
                    alert("Error => "+err.description);
                };
                socket.onclose =  function(){
                    alert("channel closed");
                };

            });
        });
        </script>
    </body>
</html>

views.py

def valid_group_users(request):
    channel_id=request.GET['channel_id']

    group_initialise=Group_initialise()
    group_initialise.channel_id=channel_id
    group_initialise.user_name=request.user
    group_initialise.save()

    try:
        data=Group_initialise.objects.all()
    except:
        pass

#As per the suggestions of Kevin:
user_list=[]
for result in data:
    user_list.append(result.user_name)
    template_values={'user_list':user_list}
temp_result={'post_element':render_to_response("user_list.html",template_values)}

channel_msg=simplejson.dumps(temp_result)

for result in data:
    if result.user_name!=request.user:
        channel.send_message(result.channel_id,channel_msg)

user_list.html

{% for users in user_list %}
    <div class="message">
        <span>
            {{users}}:
        </span>
    </div>
{% endfor %}

РЕДАКТИРОВАТЬ:

temp_result=str(temp_result)
#To remove Http-Header/content-type copy string after 40 characters
temp_result=temp_result[40:]
#Replace colon attaching automatically at the end of every user_name
temp_result=temp_result.replace(':','')
channel_msg=simplejson.dumps(temp_result)

Ответы [ 2 ]

0 голосов
/ 14 августа 2011

После некоторого процесса пробной ошибки мне удалось найти способ, и, похоже, на данный момент он работает.Я не знаю, лучший ли это подход.Я отредактировал код, чтобы отразить мои изменения, которые сейчас работают.

0 голосов
/ 13 августа 2011

channel_msg=simplejson.dumps(outstr) должен использоваться для отправки массива JSON, а не HTML.

Попробуйте это:

outstr={'page_element':render_to_response("user_list.html",template_values)}

и затем в вашем коде JavaScript:

$('#mydiv').append(data['page_element']);

Кроме того, я думаю, что в вашем цикле результатов отсутствует «+ =»:

for result in data:
        user_list+=result.user_name
...