views的作用
接收請求,響應請求。前後端不分離,返回的是頁面;前後端分離,返回的是數據。
前後端不分離
操作之前,請確保應用已經註冊到項目中,可以先看我的博客:
https://blog.csdn.net/weixin_43431593/article/details/106872257
https://blog.csdn.net/weixin_43431593/article/details/106876828
現在操作views,即通過views與數據庫、前端打交道。"接收到響應"的中間過程,就是操作數據庫的過程,因此,views需要導入模型。
models.py:
class students(models.Model):
loginname = models.CharField(max_length=20)
nickname = models.CharField(max_length=10)
sex = models.BooleanField(default=True)
views.py:
from django.shortcuts import render
from django.http import HttpResponse
from .models import students
# Create your views here.
def studentsDetails(request):
return HttpResponse("歡迎來到django學習基地")
配置主路由(項目文件的urls.py):
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
# path('admin/', admin.site.urls),
path('studyapp/', include('studyapp.urls')),
]
配置子路由(應用程序的urls.py):
from django.urls import path
from studyapp.views import studentsDetails
urlpatterns = [
path('studentsDetails/', studentsDetails),
]
命令行啓動服務:
python manage.py runserver
輸入子路由的路徑:
http://127.0.0.1:8000/studyapp/studentsDetails/
即可獲得頁面響應,我們這裏使用了HttpResponse(“歡迎來到django學習基地”)直接響應頁面,這種方式,叫前後端不分離。
前後端分離
修改views文件:
from django.shortcuts import render
from django.http import HttpResponse, JsonResponse
from .models import students
# Create your views here.
# def studentsDetails(request):
# return HttpResponse("歡迎來到django學習基地")
def studentsDetails(request):
return JsonResponse({"info":"歡迎來到django學習基地"}, safe=False, json_dumps_params={'ensure_ascii':False})
刷新頁面後,展示如下:
現在我們增加一個接口,獲取數據庫students表所有數據:
from django.shortcuts import render
from django.http import HttpResponse, JsonResponse
import json
from django.views.decorators.csrf import csrf_exempt
from django.core import serializers
from django.views.decorators.http import require_http_methods
# Create your views here.
from .models import students
# def studentsDetails(request):
# return HttpResponse("歡迎來到django學習基地")
def studentsDetails(request):
return JsonResponse({"info":"歡迎來到django學習基地"}, safe=False, json_dumps_params={'ensure_ascii':False})
@require_http_methods(["GET"])
@csrf_exempt
def getstudents(request):
response = {}
try:
studentList = students.objects.filter()
response['list'] = json.loads(serializers.serialize("json", studentList))
response['msg'] = 'success'
response['error_num'] = 0
except Exception as e:
response['msg'] = str(e)
response['error_num'] = 1
return JsonResponse(response)
rest_framework接口規範
上面我們說到了前後端分離,並且寫了一個接口,但不一定很規範,現在我們說django前後端分離的框架rest_framework。
安裝配置先看看我的另一篇博客:
https://blog.csdn.net/weixin_43431593/article/details/107134506
應用目錄添加serializers.py文件:
from .models import students
from rest_framework import serializers
class studentsSerializer(serializers.Serializer):
msg = serializers.CharField(max_length=20)
更改views:
from django.shortcuts import render
from django.http import HttpResponse, JsonResponse
import json
from django.views.decorators.csrf import csrf_exempt
from django.core import serializers
from django.views.decorators.http import require_http_methods
from .serializers import studentsSerializer
# Create your views here.
from .models import students
# def studentsDetails(request):
# return HttpResponse("歡迎來到django學習基地")
def studentsDetails(request):
return JsonResponse({"info":"歡迎來到django學習基地"}, safe=False, json_dumps_params={'ensure_ascii':False})
@require_http_methods(["GET"])
@csrf_exempt
def getstudents(request):
response = {}
try:
studentList = students.objects.filter()
response['list'] = json.loads(serializers.serialize("json", studentList))
response['msg'] = 'success'
response['error_num'] = 0
except Exception as e:
response['msg'] = str(e)
response['error_num'] = 1
serializers_obj = studentsSerializer(instance=response)
response = serializers_obj.data
return JsonResponse(response)
如上,首先導入模塊“from .serializers import studentsSerializer”,接着引用:
“
serializers_obj = studentsSerializer(instance=response)
response = serializers_obj.data
”
因爲有了序列器的作用,可以給前端返回想要的數據,這裏只返回了“msg”。