视图层知识

1. 知识回顾
1.1 创建Django
# 1.创建Django项目
django-admin startproject 项目名

# 2.创建子应用名
python manage.py startapp 应用名

# 3.启动应用名
python manage.py runserver
1.2 配置settings.py相关信息
# 1.注册子应用
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    'myapp', # 注册自定义应用
]

# 2.配置模板
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR,'templates')], # 配置模板路径
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

# 3.配置数据库
DATABASES = {  # 配置数据库
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'HOST':'localhost', # 主机
        'POST':3306, # 端口
        'USER':'root', # 用户名
        'PASSWORD':'123123', # 密码
        'NAME':'text' # 数据库名

    }
}

# 4.配置中文、时区
LANGUAGE_CODE = 'zh-Hans'
TIME_ZONE = 'Asia/Shanghai'

# 5.配置静态链接(可有可无)
STATIC_URL = '/static/'
STATICFILES_DIRS = [os.path.join(BASE_DIR,'static')]
1.3 安装数据库
# 在项目文件的 __init__.py 中
import pymysql
pymysql.install_as_MySQLdb()
1.4 回顾常用mysql命令
查看所有数据库或表  --  show databases/tables;
创建数据库	-- create database 数据库名 charset=utf8;
使用数据库 -- use 数据库名;
删除数据库 -- drop database 数据库名;
查看表中所有数据 -- select * from 表名;
查看表结构  -- desc 表名;

2. 视图层

2.1解析GET请求处理
2.1.1 视图代码编写
from django.shortcuts import render
from django.http import HttpResponse  # 所有相应都是从HttpResponse继承来的
# Create your views here.

def MyView(request):
    # 解析GET请求后的参数
    page = request.GET.get('page')
    id = request.GET.get('id')

    return HttpResponse(f'这是第一个视图,当前的页数为{page},编号为{id}')
2.1.2 视图路由
from django.contrib import admin
from django.urls import path
# 导入
from myapp import views
urlpatterns = [
    path('admin/', admin.site.urls),
    path('myview/',views.MyView),
]
2.2 解析POST请求

浏览器先发送获取页面的请求,服务器返回带有表单的页面,浏览器在页面请求POST提交数据,服务器返回相应

2.2.1 视图views
from django.shortcuts import render
# 导入
from django.http import HttpResponse  # 所有相应都是从HttpResponse继承来的
# Create your views here.

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

# 这个视图返回一个带有表单页面
def IndexView(request):
    return render(request,'index.html')
2.2.2 路由
from django.contrib import admin
from django.urls import path
# 导入
from myapp import views
urlpatterns = [
    path('admin/', admin.site.urls),
    path('myview2/',views.MyView2),
    path('indexview/',views.IndexView)
]
2.2.3 POST请求处理多选提交
request.POST.getlist(key, default=None)
# 将对应 key 值的所有数据以一个列表形式返回;key 值不存在,取 default

3.视图相应

3.1 HttpResponse
# 导包
from django.http import HttpResponse  # 所有相应都是从HttpResponse继承来的

def MyView(request):
     return HttpResponse('这是第一个视图')
3.2 JsonResponse
from django.http import JsonResponse # JsonResponse 导包
def MyView(request):
    content = {
        'name':'tom',
        'age': 18,
    }
    return JsonResponse(content)  # 返回一个字符串
3.3 render
from django.shortcuts import render
render(request,template_name,context=None,content_type=None,status=None)
# 返回一个可渲染 HTML 页面,状态码为 200
'''
request: 固定参数,响应的 request 请求,来自于参数部分接收的 HttpRequest
template_name: 返回的模板页面路径
context: 模板页面渲染所需的数据,默认为字典格式
content_type: 生成之后的结果使用的 MIME 类型
status: 响应的状态码,默认为 200
'''
3.4 重定向redirect
from django.shortcuts import redirect # 重定向
def MyView3(request):
    print('重定向')
    # 重定向,添转到一个新的路由地址,默认返回相应状态码 302
    return redirect('/myview/')

redirect 解析

# 重定向导包
frm django.shortcuts import redirect 
redirect(to, permanent=False)
# 一个重定向,浏览器通过该状态码自动跳转到一个新的路由地址,默认返回响应状态码 302
'''
to # 可以是一个 django 项目中视图函数的路由映射,也可以是一个 reverse 的反向路由解析
permanent # 如果设置为 True,将返回 301 状态码,代表永久重定向
'''
302:临时重定向,旧地址资源临时不能用了,搜索引擎只会暂时抓取新地址的内容而保存旧的地址。
301:永久重定向,旧地址资源已经不复存在,搜索引擎不光会抓取新地址的内容,还会替换旧地址为新地址

4 CBV类视图

4.1CBV

用类的方式写视图,发送什么请求,自动对应到类的函数上

4.1.1 视图
# 类视图
# 导包
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方法')
4.1.2 路由
from django.contrib import admin
from django.urls import path
# 导入类视图
from myapp import views
urlpatterns = [
    path('admin/', admin.site.urls),
    path('cbv/',views.CbvView.as_view()),
]

注意:配置类视图路由时,记得写**.as_view()函数
,类中函数必须
小写**

总结错误:

错误:出现CSRF问题

# 方法一:
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',
]

# 方法二: 在html页面加一句 {% csrf_token %}
<form method="post" action="/myview2/">
        {% csrf_token %}
        账号:<input type="text" name="user">
        密码:<input type="password" name="pwd">
        <input type="submit" value="提交">
    </form>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值