我们之前在project\views 下写过一个index函数,我们判断了如果前端请求方式是get请求,那么返回hello.html页面,如果是其他请求,则告诉用户要用get请求访问。我们用postman试一下
    image-20220224165858518.png
    等等,好像哪里不对,我们看看后台日志

    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’,如下所示

    1. MIDDLEWARE = [
    2. 'django.middleware.security.SecurityMiddleware',
    3. 'django.contrib.sessions.middleware.SessionMiddleware',
    4. 'django.middleware.common.CommonMiddleware',
    5. # 'django.middleware.csrf.CsrfViewMiddleware',
    6. 'django.contrib.auth.middleware.AuthenticationMiddleware',
    7. 'django.contrib.messages.middleware.MessageMiddleware',
    8. 'django.middleware.clickjacking.XFrameOptionsMiddleware',
    9. ]

    改完之后,django会帮我们自动重启,我们再用postman进行访问,如下图所示
    image-20220224170956593.png
    想想看,还是有点复杂,我们还要判断前端的请求方式,有没有办法解决这个问题呢?答案肯定是有的,那就是基于类的视图。

    我们在project\views.py添加如下代码

    1. class Index(View):
    2. '''
    3. 类视图
    4. '''
    5. def get(self, request):
    6. return HttpResponse("这是一个get请求")
    7. def post(self, request):
    8. return HttpResponse("这是一个post请求")
    9. def delete(self, request):
    10. return HttpResponse("这是一个delete请求")
    11. def put(self, request):
    12. return HttpResponse("这是一个put请求")

    修改caseplatform\urls.py

    1. from django.contrib import admin
    2. from django.urls import path
    3. from project import views
    4. from project.views import Index #
    5. urlpatterns = [
    6. path('admin/', admin.site.urls),
    7. # path('index/', views.index), # 新增
    8. path('index/', Index.as_view())
    9. ]

    测试get、post、delete、put请求
    image-20220224171717291.png
    image-20220224171734674.png
    image-20220224171745197.png
    image-20220224171757317.png
    如果我们使用其他请求方式访问呢?比如PATCH,django 会报请求方式不被允许。
    image-20220224171906417.png
    image-20220224171852729.png