Day03-视图层

1. 视图请求

1.1 常见的请求方式及特点

视图函数用于接收request之后返回response
请求方式有:getpost
get用于创建数据,post用于更新数据

1.2 GET请求处理

get是明文传输,长度是被限制的,有历史记录
例如连接为

http://127.0.0.1:8000/myview/?page=10&id=1001

在views.py文件里编写函数

def MyView(request):
    page = request.GET.get('page')     #request.GET 以字典的形式
    id = request.GET.get('id')
    return HttpResponse(f'这是一个视图,当前的页数为{page},当前id为{id}',)

在urls.py里配置路由

from django.contrib import admin
from django.urls import path
from myapp import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('myview/',views.MyView),
]

1.3 POST请求处理

post没有长度限制,比get安全,并且不会被留下浏览记录
过程如下在这里插入图片描述
views.py文件里一个返回带有表单页面的函数

def IndexView(request):
    return render(request,'index.html')

在templates文件夹里新建index.html文件,写表单

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h3>表单页面</h3>
    <form method="post" action="/myview2/">     #路径前要加‘/’
       {% csrf_token %}
        账号:<input type="text" name="user">
        密码:<input type="password" name="pwd">
        <input type="submit" value="提交">
    </form>
</body>
</html>

views.py里写post的请求处理

def MyView2(request):
    user = request.POST.get('user')
    pwd = request.POST.get('pwd')
    return HttpResponse(f'这是第二个视图,账号:{user},密码:{pwd}')

1.4 POST请求处理表单多值提交

也就是复选框,提交的是value。用getlist,相当于all()

2.视图响应

2.1 HttpResponse(原始)

from django.http import HttpResponse
 def MyView(request):
    #1.返回一个响应
    return HttpResponse('<h1>这是一个视图</h1>')    #返回的是一个字符串

2.2 JsonResponse(继承HttpResponse)

from django.http import JsonResponse
def MyView(request):
     content = {
         'name' : 'Tom',
         'age' : 18
     }
     return JsonResponse(content)     #返回json数据

2.3 Render(继承HttpResponse)

from django.shortcuts import render
def IndexView(request):
	content = {
		'name' : 'Rose',
		'age' : 18
	}
    return render(request,'index.html',content)   
接收请求(request),返回一个页面(index.html),及需要在页面上渲染的数据(centent)默认为字典

2.4Redirect 重定向(跳转)

from django.shortcuts import redirect
def MyView3(request):
    print('重定向')
    #跳转到另一个页面
    return redirect('/myview/')     #路径前必须加‘/’

3.CBV类试图

3.1 FBV,CBV的概念

CBV类试图

CBV:就是在类里处理请求

from django.http import HttpResponse
from django.views import View
class CbvView(View):
    def get(self,request):
        return HttpResponse('这是类视图中的get方法')

    def post(self,request):
        return HttpResponse('这是类视图中的post方法')

    def put(self,request):
        return HttpResponse('这是类视图中的put方法')

    def delete(self,request):
        return HttpResponse('这是类视图中的delete方法')
FBV函数视图

FBV:在函数里处理请求

from django.http import HttpResponse
# FBV 函数试图
# 解析GET请求
def MyView(request):
    page = request.GET.get('page')
    id = request.GET.get('id')
    return HttpResponse(f'这是一个视图,当前的页数为{page},当前id为{id}',)

3.2 CBV的路由映射方式

使用as_view()的映射方式

from django.contrib import admin
from django.urls import path
from myapp import views
urlpatterns = [
    path('cbv/',views.CbvView.as_view())
]

总结

常用的命令

创建Django项目(在命令框):django-admin startproject 项目名
创建子应用(在项目终端):python manage.py startapp 子应用名
启动项目(在项目终端):python manage.py runserver
生成迁移(在项目终端):python manage.py makemigrations
执行迁移(在项目终端):python manage.py migrate
创建超级用户(在项目终端):python manage.py createsuperuser

回顾mysql常用命令

展示所有库:show databases;
创建数据库:create database 库名;
使用库: use 库名;
删除库:drop database 库名;
展示库里所有表:show tables;
查询表里的内容:select * from 表名;

错误

在这里插入图片描述

解决方法

有两种解决方法:
第一种:在表单里边加上***{% csrf_token %}***
在这里插入图片描述
第二种方法:在settings.py文件里找到MIDDLEWARE注释掉中间件这行代码
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值