2016-11-25 5 views
3

У меня большая проблема. У меня есть следующие таблицыИспользование функции ajax для хранения данных в базе данных (web2py framework)

db.define_table('post', 
       Field('user_email', default=auth.user.email if auth.user_id else None), 
       Field('title', 'string', requires=IS_NOT_EMPTY()), 
       Field('body', 'text', requires=IS_NOT_EMPTY()), 
       Field('votes', 'integer', default=0, readable=False, writable=False), 
       auth.signature 
       ) 

db.define_table('comm', 
       Field('post','reference post'), 
       Field('body','text'), 
       auth.signature 
       ) 

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

Я не понимаю, как работает «ссылка». Я думаю, что когда я вставляю новый текст, я должен указать, из какого сообщения идет, но, как я уже сказал, я смущен. Можете ли вы дать краткое объяснение того, как связать эти две таблицы? потому что мне нужно закодировать функцию python, в которой я должен указать комментарии, которые будут отображаться на определенной должности.

<div class="well"> 
    <h1>{{=post.title}}</h1> 
    {{=post.body}} 
</div> 

{{if field_var_created_by == auth.user_id:}} 
<a href={{=URL('edit_post',args=post.id)}} class="btn btn-danger" role="button">Edit Post</a> 
{{pass}} 

<form> 
<div class="form-group"> 
    <label for="comment">Comment:</label> 
    <textarea class="form-control" rows="5" id="comment"></textarea> 
    <script> 
     document.write('hello'); 
    </script> 
</div> 
</form> 
<a href="" class="btn btn-success" role="button">Add Comments</a> 

Как вы можете видеть, я получил все данные сообщения в представлении, используя функцию python в контроллере. Я хочу получить ввод текстовой области, поместить ее в базу данных и затем как-то отобразить ее на этом посту.

https://wwu39.pythonanywhere.com/prostudy

У меня есть мой сайт загрузился на pythonanywhere. Проблема, с которой я столкнулась, находится на странице форума. Чтобы получить доступ к форуму, вам необходимо войти в систему. Не беспокойтесь, я не буду спамить вас. Это небольшое приложение, которое никто не будет использовать. Перейдите на форум, выберите сообщение, и вы увидите проблему. Кнопка добавления комментариев еще ничего не делает. Я отключил функцию проверки подлинности пользователя, чтобы облегчить вам работу

ответ

2

Компонент загрузки Web2py будет лучшим решением вашей проблемы, точно такой же пример объясняется в web2py book, read LOAD. Если вы используете компонент web2py, вам не нужно писать код javascript, также вы можете легко использовать тот же компонент в других местах.

Пройдите вышеприведенный пример. Вы должны сделать несколько изменений в определении таблицы, контроллере и URL-адресе загрузки.

Добавить столбец для комментариев, чтобы прокомментировать схему, так же, как и вы, и сделать столбец прочитанным и доступным для записи ложным. Потому что вы не хотите, чтобы показать, что столбец в форме

db.define_table('comment_post', 
       Field('post','reference post', readable=False, writable=False), 
       Field('body','text'), 
       auth.signature 
       ) 

Тогда при встраивании компоненты нагрузки, передать идентификатор сообщения, как вары

{{=LOAD('comments','post.load', vars={'post_id': parent_post_id}, ajax=True)}} 

Pass parent_post_id от родительского контроллера, в вашем случае я думаю request.args(0) содержит родительский идентификатор.

В контроллере теперь используют post_id передается от нагрузки URL и установите его в поле post

def post(): 
    db.comment_post.post.default = request.vars.post_id 
    return dict(form=SQLFORM(db.comment_post).process(), 
       comments=db(db.comment_post).select()) 

Надеется, что это помогает.