Django操作views(一)

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”。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章