我们之前在project\views 下写过一个index函数,我们判断了如果前端请求方式是get请求,那么返回hello.html页面,如果是其他请求,则告诉用户要用get请求访问。我们用postman试一下
等等,好像哪里不对,我们看看后台日志
System check identified no issues (0 silenced).
February 24, 2022 - 16:57:28
Django version 3.2.3, using settings ‘caseplatform.settings’
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
Forbidden (CSRF cookie not set.): /index/
[24/Feb/2022 16:58:29] “POST /index/ HTTP/1.1” 403 2870
这是什么鬼?我们看到Forbidden (CSRF cookie not set.),百度百科说csrf是跨站请求伪造,实际上是django的安全机制,这里我们先不展开讨论,先说下怎么解决,我们打开settings.py文件,找到MIDDLEWARE,注释’django.middleware.csrf.CsrfViewMiddleware’,如下所示
MIDDLEWARE = ['django.middleware.security.SecurityMiddleware','django.contrib.sessions.middleware.SessionMiddleware','django.middleware.common.CommonMiddleware',# 'django.middleware.csrf.CsrfViewMiddleware','django.contrib.auth.middleware.AuthenticationMiddleware','django.contrib.messages.middleware.MessageMiddleware','django.middleware.clickjacking.XFrameOptionsMiddleware',]
改完之后,django会帮我们自动重启,我们再用postman进行访问,如下图所示
想想看,还是有点复杂,我们还要判断前端的请求方式,有没有办法解决这个问题呢?答案肯定是有的,那就是基于类的视图。
我们在project\views.py添加如下代码
class Index(View):'''类视图'''def get(self, request):return HttpResponse("这是一个get请求")def post(self, request):return HttpResponse("这是一个post请求")def delete(self, request):return HttpResponse("这是一个delete请求")def put(self, request):return HttpResponse("这是一个put请求")
修改caseplatform\urls.py
from django.contrib import adminfrom django.urls import pathfrom project import viewsfrom project.views import Index #urlpatterns = [path('admin/', admin.site.urls),# path('index/', views.index), # 新增path('index/', Index.as_view())]
测试get、post、delete、put请求



如果我们使用其他请求方式访问呢?比如PATCH,django 会报请求方式不被允许。

