在 Django 中处理 Ajax 请求


介绍

本教程介绍如何在 Django Web 框架中执行 ajax 请求。我们将创建一个简单的点赞应用程序作为示例的一部分。

词汇表

  • 项目初始化
  • 创建模型
  • 创建视图
  • 写入网址
  • 使用 Jquery Ajax 执行请求。
  • 将模型注册到管理并添加一些帖子。

执行:

1. 启动 Django 项目 – 这里我假设您已完成 Django 安装。

  • 要创建 Django 项目,请执行:
$ django-admin startproject django_example
  • 创建项目后,我们需要创建一个 Django 应用程序。要创建一个应用程序,请说“post”,执行以下命令:
$ cd django_example
$ python manage.py startapp post
  • 转到 django_example/settings.py 添加后应用程序

  • img

  • 现在你将拥有类似这样的文件:

    在 Django 中处理 Ajax 请求

2. 创建模型: 要创建模型,请转到 post 目录并打开 models.py。

  • 在 models.py 中。首先,创建一个帖子表。要创建帖子表,您需要编写:

    class Post(models.Model):
      post_heading = models.CharField(max_length=200)
      post_text = models.TextField()
          def __unicode__(self):      # If python2 use __str__ if python3
                  return unicode(self.post_heading)
  • 然后在 models.py 中,像表一样创建。要像表一样创建,您需要编写:

    class Like(models.Model):
      post = models.ForeignKey(Post, on_delete = models.CASCADE)
  • 进行迁移并迁移步骤:

    $ python manage.py makemigrations
    $ python manage.py migrate

    完成这些步骤后,我们的数据库表就可以使用了。

    3. 创建视图:

    要创建视图,我们需要进入post目录并打开views.py

  • 首先,导入之前创建的模型和 HTTP 响应

    from .models import Post, Like
    from django.http import HttpResponse
  • 创建一个索引视图来呈现所有帖子。代码示例:

    def index(request):
      posts = Post.objects.all()  # Getting all the posts from database
      return render(request, 'post/index.html', { 'posts': posts })
  • 创建点赞帖子视图来点赞帖子。当我们点击“喜欢按钮”时,将调用此视图。代码示例:

    def likePost(request):
      if request.method == 'GET':
             post_id = request.GET['post_id']
             likedpost = Post.objects.get(pk=post_id) #getting the liked posts
             m = Like(post=likedpost) # Creating Like Object
             m.save()  # saving it to store in database
             return HttpResponse("Success!") # Sending an success response
      else:
             return HttpResponse("Request method is not a GET")

    创建视图后,我们将开始编写模板和 jQuery 来执行 ajax 请求。

    4. 创建 URL:

    要创建 URL,请打开 django_example/urls.py。你的 django_example/urls.py 应该看起来像这样:

    from django.conf.urls import include, url
    from django.contrib import admin
    urlpatterns = [
       url(r'^admin/', admin.site.urls),
       url(r'^', include('post.urls')),   # To make post app available at /
     ]

    要创建 URL,请创建文件 post/urls.py。你的 post/urls.py 应该看起来像这样:

    from django.conf.urls import url
    from . import views
    urlpatterns = [
          url(r'^$', views.index, name='index'),  # index view at /
          url(r'^likepost/$', views.likePost, name='likepost'),   # likepost view at /likepost
     ]

    5、制作模板并执行ajax请求:

  • 创建文件 post/templates/post/index.html。代码示例:

    <!DOCTYPE html>
    <html>
    <head>
      <title>Like Post App</title>
    </head>
    <body>
      <p id="message"></p>
      {% for post in posts %}
      <h3>{{ forloop.counter }}) {{ post.post_heading }}</h3>
      <p>{{ post.post_text }} </p>
      <a class="likebutton" id="like{{post.id}}" href="#" data-catid="{{ post.id }}">Like</a>
      {% endfor %}
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
      <script type="text/javascript">
      $('.likebutton').click(function(){
      var catid;
      catid = $(this).attr("data-catid");
      $.ajax(
      {
          type:"GET",
          url: "/likepost",
          data:{
                   post_id: catid
          },
          success: function( data ) 
          {
              $( '#like'+ catid ).remove();
              $( '#message' ).text(data);
          }
       })
    });
    </script>
    </body>
    </html>
    Basically, what we are doing here is - we are making an ajax get request -> /likepost?post_id=<id_of_liked_post>

    6. 将模型注册到管理并添加一些帖子:

  • 打开 post/admin.py。

  • 将模型导入到 admin.py。

    from .models import Post, Like
  • 注册您的模型:

    admin.site.register(Post)
    admin.site.register(Like)


原文链接:codingdict.net