通过AJAX修改数据库值

竿

我正在尝试让AJAX在Django(1.8)上运行。

我的问题来自$.ajax方法,它没有将值发送到服务器。我必须将url的路由更改为url: '/vote/'url: '/'以便它可以工作(并且不返回404,但找不到),但是它不发送值(数据库未修改)。此外,在index.html<a href={% url 'views.vote' %}></a>所以我使用返回一个错误<a href="/vote/"></a>

这是我所拥有的:

├── assets
│   ├── css
│   │   └── style.css
│   └── js
│       ├── app.js
│       └── jquery.js
├── db.sqlite3
├── manage.py
├── templates
│   └── index.html
├── values
│   ├── __init__.py
│   ├── admin.py
│   ├── migrations
│   │   ├── __init__.py
│   ├── models.py
│   ├── tests.py
│   ├── urls.py
│   └── views.py
└── votes
    ├── __init__.py
    ├── settings.py
    ├── urls.py
    └── wsgi.py

values / models.py

from django.db import models

class Value(models.Model):
    title = models.CharField(max_length=255)
    points = models.IntegerField(default=1)

    def __str__(self):
        return self.title

投票/ urls.py

from django.conf.urls import include, url
from django.contrib import admin
from django.contrib.staticfiles.urls import staticfiles_urlpatterns


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

urlpatterns += staticfiles_urlpatterns()

值/网址

from django.conf.urls import url

from . import views

urlpatterns = [
    url(r'^$', 'values.views.index'),
    url(r'^vote/$', 'values.views.vote'),
]

值/ views.py

from django.shortcuts import render, get_object_or_404
from django.http import HttpResponse, HttpResponseRedirect

from .models import Value


def index(request):
    val = Value.objects.all()
    return render(request, 'index.html', {'values': val})


def vote(request):
    value = get_object_or_404(Value, pk=request.POST.get('value'))
    value.points += 1
    value.save()
    return HttpResponse()

templates / index.html

{% load static from staticfiles  %}
<html>
<head>
        <title>My title</title>
         <script src="{% static 'js/jquery.js' %}"></script>
         <script src="{% static 'js/app.js' %}"></script>
         <link rel="stylesheet" href="{% static 'css/style.css' %}">
</head>
<body>
    <ul>
            {% for foo in values %}
            <li>
                <p class="story-title">
                    {{ foo.title}}
                </p>
                <p class="points">
                    <a href="/vote/" class="vote" id="story-vote-{{ foo.id }}">{{ foo.points }} points </a>
                </p>
            </li>
            {% endfor %}
    </ul>

</body>
</html>

资产/js/app.js

$(document).ready(function(){

// using jQuery
function getCookie(name) {
    var cookieValue = null;
    if (document.cookie && document.cookie != '') {
        var cookies = document.cookie.split(';');
        for (var i = 0; i < cookies.length; i++) {
            var cookie = jQuery.trim(cookies[i]);
            // Does this cookie string begin with the name we want?
            if (cookie.substring(0, name.length + 1) == (name + '=')) {
                cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                break;
            }
        }
    }
    return cookieValue;
}
var csrftoken = getCookie('csrftoken');


function vote (valueID) {
    $.ajax({
        type: 'POST',
        url: '/',
        data: { "value": valueID },
        success: function () {
            //$("#story-vote-" + valueID).hide();
            $("#story-title-" + valueID).css({"margin-left": "15px"});
        },
        headers: {
            'X-CSRFToken': csrftoken
        }
    });
    return false;
}


$("a.vote").click(function () {
    var valueID = parseInt(this.id.split("-")[2]);
    return vote(valueID);
})


function csrfSafeMethod(method) {
    // these HTTP methods do not require CSRF protection
    return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}
$.ajaxSetup({
    beforeSend: function(xhr, settings) {
        if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
            xhr.setRequestHeader("X-CSRFToken", csrftoken);
        }
    }
});


});
丹尼尔·罗斯曼

您的问题与您的Ajax无关。您的问题出在您的表决/urls.py中:您要包括其他以结尾为的模式的url $,因此没有多余的匹配项。它应该是:

url(r'^', include('values.urls')),

(请注意1.9将明确警告此行为。)

现在,您可以将Ajax帖子的位置更改回正确的URL。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

修改数据库的元数据

来自分类Dev

django 修改数据库对象

来自分类Dev

保存更改之前,如何修改数据库上下文实体的当前值

来自分类Dev

如何仅使用PL / SQL更新大值的CLOB,而不修改数据库模式?

来自分类Dev

修改数据库中主键的身份规范

来自分类Dev

codeigniter-无法删除或修改数据库

来自分类Dev

ddev:如何修改数据库凭据

来自分类Dev

Java在运行jar时修改数据库

来自分类Dev

使用MySQL Workbench修改数据库架构

来自分类Dev

在Entity Framework查询期间修改数据库表

来自分类Dev

Android:修改数据库后无法更新UI

来自分类Dev

RecyclerView 修改数据库行后不刷新

来自分类Dev

修改数据库表中的项目

来自分类Dev

Inno setup - 允许修改数据库

来自分类Dev

MySQL临时修改数据库用于开发

来自分类Dev

PHP通过复选框boolean更改数据库的多个值

来自分类Dev

通过在后台连续轮询更改数据库值后通知用户

来自分类Dev

Umbraco通过Nuget-如何更改数据库?

来自分类Dev

通过软件更新来更改数据库

来自分类Dev

通过复选框更改数据库更新

来自分类Dev

如何通过QSqlTableModel保存更改数据库?

来自分类Dev

Laravel 5,更改数据库中的值

来自分类Dev

Python-Eve:在插入数据库之前,使用请求前事件挂钩修改数据

来自分类Dev

将 JSON 数据传递给 WebApi 而不修改数据库

来自分类Dev

修改数据库的方法正在使从数据库中删除行的方法不起作用

来自分类Dev

如何在Meteor App中从UI修改数据库

来自分类Dev

玩!框架异步调用修改数据库的相同对象

来自分类Dev

从Silverlight应用程序修改数据库是否是一个坏主意

来自分类Dev

运行脚本来修改数据库-Mongoose Model.find不是函数

Related 相关文章

热门标签

归档