Django restframework

Bound_w發表於2018-12-06

 

 

 

 

1.知識點補充:什麼是程式設計?

  -程式設計就是資料結構和演算法的結合。

 

2.什麼是rest?

我們將要做的前後端分離的專案會用到它,可以用 json 來交換資料。REST 不是什麼具體的軟體或者程式碼,而是一種思想。這麼說就太抽象了,REST 剛出來的時候是以論文的形式提出的,是一種設計的形式。

  -2.1 rest下的URL?

    URL唯一代表資源,以http請求來判斷使用者的行為

  -2.2  URL的設計規範?

    GET:  127.0.0.1:8000/books/       #獲取所有的資料     返回[{},{},{}]

    GET:  127.0.0.1:8000/books/{id}   #獲取單條資料       單條資料

    POST:  127.0.0.1/books/     #增加資料                 新增成功的資料{}

    PUT:  127.0.0.1:8000/books/{id}   #修改資料    更新完成的資料{}

    DELETE:  127.0.0.1:8000/books/{id}   #刪除資料  返回   '    '

 

3.  APIView  

  -3.1使用:

    1.  下載:   pip install djangorestframework

    2.  匯入模組:  from  rest_framework.views  import  APIView

    3.CBV繼承APIView

4.DRF解析器流程圖

 

 

 

 

 

5.程式碼:

url:

from django.urls import path, include, re_path
from classbasedview import views

urlpatterns = [
    re_path('login/$', views.LoginView.as_view()),
    re_path('courses/$', views.CourseView.as_view()),
]

view

from django.shortcuts import render, HttpResponse
from django.views import View
from django.core.handlers.wsgi import WSGIRequest

from rest_framework.views import APIView
from rest_framework.parsers import FormParser, JSONParser

import json

from .models import Course

# Create your views here.


class LoginView(APIView):
    # parser_classes = [FormParser]
    def get(self, request):
        return render(request, 'login.html')

    def post(self, request):

        request.data
        return HttpResponse("Ok")


class CourseView(APIView):
    def get(self, request):
        course_list = list()

        for course in Course.objects.all():
            course = {
                "course_name": course.course_name,
                "description": course.description
            }

            course_list.append(course)

        return HttpResponse(json.dumps(course_list, ensure_ascii=False))



因為json.dumps 序列化時對中文預設使用的ascii編碼.想輸出真正的中文需要指定ensure_ascii=False:

HTML

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
</head>
<body>

    <form action="", method="post" enctype="application/x-www-form-urlencoded">
        {% csrf_token %}
        <p>使用者名稱:<input type="text" name="user"></p>
        <p>密碼:<input type="password" name="password"></p>
        <p><input type="submit" value="提交" ></p>
    </form>

    <button class="btn">點選提交Ajax資料</button>
</body>

    <script>
        $('.btn').click(function () {
            $.ajax({
                url: "",
                type: 'post',
                contentType: "application/json",
                data: JSON.stringify({
                    name: "pizza",
                    age: 18
                })
            })
        })
    </script>
</html>

 

相關文章