view视图响应方法

from django.shortcuts import render, HttpResponse, redirect


# Create your views here.


def index(request):  # http相关请求信息--封装--HttpRequest对象-传参-->request
    # request 方法
    if request.method == 'GET':
        print('---------------------GET---------------------')
        print('GET:', request.GET)  # get请求提交的数据
        print('META:', request.META)  # 所有的HTTP请求首部相关信息, 具体的头部信息取决于客户端和服务端
        print('path:', request.path)  # /index/
        print('path_info:', request.path_info)  # /index/返回用户访问的url,不包含域名
        print('full_path:', request.get_full_path())  # /index/?username=Sunny&password=123
        print('body:', request.body)
        return render(request, 'index.html')

    else:
        # index.html中,表单form action="", action为空表示从当前路下提交数据, method="get",method,请求方式:get or post

        print('---------------------POST---------------------')
        print('method:', request.method)  # 请求方法:get还是post
        print('body:',
              request.body)  # 请求体, byte类型, request.POST数据就是从body中取到的.b'username=sunny&password=1234'(socket发送的byte类型对象)
        print('path:', request.path)
        print('path_info:', request.path_info)  # 返回用户访问的url,不包含域名
        print('full_path:', request.get_full_path())
        print('META:', request.META)  # 所有的HTTP请求首部相关信息, 具体的头部信息取决于客户端和服务端
        print('POST:',
              request.POST)  # 包含所有HTTP POST参数(request.body中的数据封装)的类字典对象,<QueryDict: {'username': ['sunny'], 'password': ['1234']}>

        return HttpResponse('Post 请求已响应')


# ################ HTTP协议是基于请求响应的协议,一请求对应一响应 ################
# HTTP协议 -- 应用层协议,下层传输层 -- TCP协议(一收一发),基于流,稳定
# django和浏览器都封装了socket

# views视图处理的是对于浏览器请求的响应
# 1.浏览器get请求:/login/
#   服务器响应: login.html
# 2.浏览器post请求: {'username':'sunny', 'password':'1234'}
#   服务器响应: status code:302 not found(重定向状态码), location: /home/
# 3.浏览器get请求: /home/ 本质:浏览器接收到重定向状态码,内部做了location.herf='http:127.0.0.1/home/  (location.href='http://www.baidu.com') 重定向请求
#   服务器响应:接收到重定向的请求,响应home.html
def login(request):
    if request.method == 'GET':
        return render(request, 'login.html')  # 响应html页面
    else:
        username = request.POST.get('username')
        password = request.POST.get('password')
        if username == 'sunny' and password == '1234':
            return redirect('/home/')  # 重定向页面, 参数为路径,需要在urls中定义
            # return render(request, 'home.html')
        else:
            return HttpResponse('Wrong user name or password!Please Retry!')  # 响应消息


# 首页
def home(request):
    return render(request, 'home.html')

响应对象的三个方法:

  • HttpResponse: 响应消息

  • render: 响应页面

  • redirect: 响应重定向信息

    render, redirect本质是调用的HttpResponse,因为响应的不管是页面还是消息都是字符串

重定向的2个状态码

  • 301: 永久重定向, 原来的资源完全不用,原来的网站完全不存在

  • 302: 临时重定向, 原来的资源还在,网站还在

    html:

    <head>
    <meta name='keywords' content='nga, ngacn...'>
    <head>
    搜索引擎通过搜索html keyworks关键字(nga, ngacn等), 就能找到网站.因为百度通过爬虫收录了所有上线网站的html页面
    
posted @ 2020-05-07 15:04  ManIThMrrr  阅读(146)  评论(0编辑  收藏  举报