Обновление содержимого таблицы в шаблоне django при обновлении содержимого mysqlDatabase - PullRequest
0 голосов
/ 03 мая 2018

Я новичок в django и Ajax. Я могу извлечь содержимое базы данных из базы данных mysql, теперь я хочу, чтобы каждый раз, когда данные обновлялись в базе данных, моя таблица также должна обновляться. Я знаю, что должен ajax, но я У меня нет anyidea, как с этим справиться. Пожалуйста, помогите мне. Как я могу это сделать? Это мой Views.py

def index(request):
testBenchdb = TestBenchDB.objects.all()
template = loader.get_template('TestBench/MainView.html')
context = {
    'testBenchdb': testBenchdb,
}
return HttpResponse(template.render(context, request))

Это моя модель класса

class TestBenchDB(models.Model):
Sl_No= models.IntegerField
TestBenchID= models.CharField(max_length=200)
project = models.CharField(max_length=200)
status= models.CharField(max_length=200)
TestPass = models.IntegerField
TestFail=models.IntegerField
FrameworkErrors=models.IntegerField
LastUpdated=models.DateTimeField

Это мой шаблон

 <!DOCTYPE html>
 <html>
 <head>
 <link rel="stylesheet" href="https://fonts.googleapis.com/icon? 
 family=Material+Icons">
 <style>
.blueboxed {
    border: 10px solid #b9fcff;
    background: #b9fcff;
}
    .GreyBoxed{
        border: 10px solid #f2f2f2;
    background: #f2f2f2;

    }
    .WhiteSpace
    {
         border: 5px solid #ffffff;
    background: #ffffff;
    }
    table {
font-family: arial, sans-serif;
border-collapse: collapse;
width: 100%;
}
    td, th {
border: 1px solid #dddddd;
text-align: left;
padding: 8px;
 }
    tr:nth-child(even) {
 background-color:rgba(170,236,255,0.86);

 }
th{
    background-color: rgba(8,153,255,0.86)
;
}
tr{
     -moz-box-shadow: 3px 3px 5px #535353;
    -webkit-box-shadow: 3px 3px 5px #535353;
    box-shadow: 3px 3px 5px #535353;
    -moz-border-radius: 6px 6px 6px 6px;
    -webkit-border-radius: 6px;
    border-radius: 6px 6px 6px 6px;
}
    .roundbox {

}
</style>

</head>
<body>
<div class="roundbox">
<div class="blueboxed">
<p style="text-align:left;">Dr.PotatoHead
<span style="float:right;"><a href="url">SignOut</a></span>
</p>
</div>
<br>
<div class="GreyBoxed">
<p><a href="url">Refresh</a> <a href="url">Add Bench</a> <a 
href="url">StopServers</a></p>
</div>
<br>
<table>
<tr>
    <th>Sl.No.</th>
    <th>Test Bench Id</th>
    <th>Project</th>
    <th>Status</th>
    <th>Test Pass</th>
    <th>Test Fail</th>
    <th>Framework Errors</th>
    <th>Last Updated</th>
    <th>Actions</th>
 </tr>

    {% if testBenchdb %}
    {% for tb in testBenchdb %}
        <tr>
            <td>{{  tb.id}}</td>
            <td>{{ tb.TestBenchID }}</td>
            <td>{{tb.project}}</td>
            <td>{{tb.status}}</td>
            <td>100</td>
            <td>10</td>
            <td>1</td>
            <td>4/20/2018 3:13:56 PM</td>
            <td>
                <button style="font-size:12px"><i class="material- 
          icons">pause</i></button>
                <button style="font-size:12px"><i class="material- 
          icons">error</i></button>
                <button style="font-size:12px"><i class="material- 
          icons">settings_backup_restore</i></button>
                <button style="font-size:12px"><i class="material- 
          icons">help_outline</i></button>
            </td>
         </tr>

    {% endfor %}
    {% endif %}

  </table>
  {#   <script>#}
  {#    var append_increment = 0;#}
  {#    setInterval(function() {#}
  {#        $.ajax({#}
  {#            type: "GET",#} 
  {#            url: {% url 'get_more_tables' %},  // URL to your view that 
       serves new info#}
  {#            data: {'append_increment': append_increment}#}
  {#        })#}
  {#        .done(function(response) {#}
  {#            $('#_appendHere').append(response);#}
  {#            append_increment += 10;#}
  {#        });#}
  {#    }, 10000)#}
  {#    </script>#}
  {#<script>#}
  {#    var append_increment = 0;#}
  {#    setInterval(function() {#}
  {#        $.ajax({#}
  {#            type: "GET",#}
  {#            url: {% url 'index' %},  // URL to your view that serves new 
  info#}
  {#            data: {'append_increment': append_increment}#}
  {#        })#}
  {#        .done(function(response) {#}
  {#            $('#_appendHere').append(response);#}
  {#            append_increment += 10;#}
  {#        });#}
  {#    }, 10000)#}
  {#</script>#}

  </div>
  </body>
  </html>

1 Ответ

0 голосов
/ 03 мая 2018

Это можно сделать двумя способами:

  1. Веб-сокеты : Веб-сокет позволяет осуществлять двустороннюю связь между клиентом и сервером. И сервер также может инициировать связь, как только клиент подключится к серверу через веб-сокет. В настоящее время веб-сокеты поддерживаются практически всеми современными браузерами. Для справки: https://www.youtube.com/watch?v=plYRxKUow5w
  2. Длительный опрос вашего сервера : При этом ваш клиент отправит запрос на получение вашего сервера. И сервер будет держать запрос на удержании и проверять базу данных, если есть какие-либо изменения от версии, которая была предоставлена ​​для клиента. Здесь может быть 3 варианта:

Если нет изменений и тайм-аут удержания не достигнут; через некоторое время процесс продолжит удерживать базу данных запросов и опросов.

Если произошли изменения и тайм-аут удержания не достигнут; тогда процесс вернет изменения клиенту.

Если нет изменений и тайм-аут удержания достигнут; затем процесс вернется, указав, что изменений не было.

После получения ответа от сервера клиент снова выполнит запрос get. И весь процесс будет повторяться.

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

Для справки: https://www.youtube.com/watch?v=vaIcwhfuweo

...