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>