django视图

概述:
        作用:视图接收web请求,并响应web请求
        本质:视图就是python中的一个函数
        响应:
            响应过程:
                用户在浏览器中输入网址www.sunck.wang/sunck/index.html
                ---网址--->
                django获取网址信息,去掉IP与端口号,网址变成:sunck/index.html
                ---虚拟路径与文件名--->
                url管理器逐个匹配urlconf,记录视图函数
                ---视图函数名--->
                视图管理,找到对应的视图去执行,返回结果给浏览器
                ---响应的数据--->
                返回第一步:用户在浏览器中输入网址
            网页
                重定向
                错误视图
                    404视图:找不到网页(url匹配不成功时返回)时返回
                        在templates目录下定义404.html

<!doctype html>
                            <html lang="en">
                            <head>
                                <meta charset="UTF-8">
                                <meta name="viewport"
                                      content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
                                <meta http-equiv="X-UA-Compatible" content="ie=edge">
                                <title>Document</title>
                            </head>
                            <body>
                                <h1>页面丢失</h1>
                                <h2>{{request_path}}</h2>
                            </body>
                            </html>

 request_path:导致错误的网址
                        配置settings.py
                            DEBUG
                                如果为 True,永远不会调用404页面,需要调整为 False 才会显示
                            ALLOWED_HOSTS = ['*']
                    500视图:在视图代码中出现错误(服务器代码错误)
                    400视图:错误出现在客户的操作
            JSON数据
    url配置
        配置流程:
            制定根级url配置文件
                settings.py文件中的ROOT_URLCONF
                ROOT_URLCONF = 'project.urls'
                默认实现了
            urlpatterns
                一个url实例的列表
                url对象
                    正则表达式
                    视图名称
                    名称
            url匹配正则的注意事项
                如果想要从url中获取一个值,需要对正则加小括号
                匹配正则前方不需要加'/'
                正则前需要加'r'表示字符串不转义
        引入其他url配置
            在应用中创建urls.py文件,定义本应用的url配置,在工程urls.py中使用include方法


                from django.contrib import admin
                from django.conf.urls import url,include
                urlpatterns = [
                    url(r'^admin/', admin.site.urls),
                    url(r'^', include('myApp.urls', namespace="myAPP")),
                ]

                from django.urls import path, include
                from django.conf.urls import url
                from . import views
                urlpatterns = [
                    url(r'^$', views.index, name="index"),
                ]

 url的反向解析
            概述:如果在视图,模板中使用了硬编码链接,在url配置发生改变时,动态生成链接的地址
            解决:在使用链接时,通过url配置的名称,动态生成url地址
            作用:使用url模板
    视图函数
        定义视图:
            本质:一个函数
            视图参数:
                一个HttpRequest的实例
                通过正则表达式获取的参数
            位置:一般在views.py文件下定义
    HttpRequest对象
        概述:
            服务器接收http请求后,会根据报文创建HttpRequest对象
            视图的第一个参数就是HttpRequest对象
            django创建的,之后调用视图时传递给视图
        属性
            path:请求的完整路径(不包括域名和端口)
            method:表示请求的方式,常用的有GET,POST
            encoding:表示浏览器提交的数据的编码方式,一般为utf-8
            GET:类似于字典的对象,包含了get请求的所有参数
            POST:类似于字典的对象,包含了post请求的所有参数
            FILES:类似字典的对象,包含了所有上传的文件
            COOKIES:字典,包含所有的cookie
            session:类似字典的对象,表示当前会话
        方法
            is_ajax():如果是通过XMLHttpRequest发起的,返回 True
        QueryDict对象
            request对象中的GET,POST都属于QueryDict对象
            方法:
                get():
                    根据键获取值,只能获取一个值
                    www.sunck.wang/abc?a=1&b=2&c=3
                getlist()
                    将键的值以列表的形式返回
                    可以获取多个值
                    www.sunck.wang/abc?a=1&b=2&c=3
        GET属性
            获取浏览器传递过来数据

www.sunck.wang/abc?a=1&b=2&c=3
            urls.py
            url(r'^get1', views.get1),   #结尾不能加$,否则无法匹配
            views.py
            def get1(request):
                a = request.GET.get('a')
                b = request.GET.get('b')
                c = request.GET.get('c')
                return HttpResponse(a + " " + b + " " + c)

            www.sunck.wang/abc?a=1&a=2&c=3
            urls.py
            url(r'^get2', views.get2),
            views.py
            def get2(request):
                a = request.GET.getlist('a')
                a1 = a[0]
                a2 = a[1]
                c = request.GET.get('c')
                return HttpResponse(a1 + " " + a2 + " " + c)

POST属性
            使用表单模拟POST请求
            关闭CSRF:project\project\settings.py

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',
                ]

示例:

def showregist(request):
                    return render(request, 'myApp/regist.html',)

                def regist(request):
                    name = request.POST.get("name")
                    gender = request.POST.get("gender")
                    age = request.POST.get("age")
                    hobby = request.POST.getlist("hobby")
                    print(name)
                    print(gender)
                    print(age)
                    print(hobby)
                    return HttpResponse("regist")

路径:

url(r'^showregist/$', views.showregist),
url(r'^showregist/regist/$', views.regist),

页面:

<!doctype html>
                <html lang="en">
                <head>
                    <meta charset="UTF-8">
                    <meta name="viewport"
                          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
                    <meta http-equiv="X-UA-Compatible" content="ie=edge">
                    <title>注册</title>
                </head>
                <body>
                    <form action="regist/" method="post">
                        姓名:<input type="text" name="name" value=""/>
                        <hr>
                        性别:<input type="radio" name="gender" value="1">男<input type="radio" name="gender" value="0">女
                        <hr>
                        爱好:<input type="checkbox" name="hobby" value="power"/>权利<input type="checkbox" name="hobby" value="money">金钱<input type="checkbox" name="hobby" value="beauty">美女<input type="checkbox" name="hobby" value="Tesla">Tesla
                        <hr>
                        <input type="submit" value="注册">
                    </form>
                </body>
                </html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值