Django View视图

ALLOWED_HOSTS

允许以那个主机形式访问后端

默认127.0.0.1

如果修改了允许的方式,需要将运行的 ip 域名 添加进去

默认的127 需要自己添加进去 才可以访问

安全机制 只能以罗列的 来访问

ALLOWED_HOSTS = ["192.168.230.128","127.0.0.1"]

Url conf

匹配路由的时候我们严格要加/

		正确:path/

		正确:path

reverse 

	就是通过name动态获取路径(或者路由)

	如果没有设置namespace 则可以通过namespace:name来获取 	reverse(namespace:name)

name

		我们可以通过name能找到路由

		name就是给url起一个名字

#   登陆成功之后需要跳转到首页
#   注册之后跳转首页
#   viewname 通过视图名字
#   路由动态获取
path = reverse('index')
print(path)

HttpRequest对象

  • 提取URL的特定部分,如/weather/beijing/2018,可以在服务器端的路由中用正则表达式截取;

  • 查询字符串(query string),形如key1=value1&key2=value2;

  • 请求体(body)中发送的数据,比如表单数据、json、xml;

  • 在http报文的头(header)中。

    第一种通过url来获取数据

  • 如果想从URL中获取值,需要在正则表达式中使用分组,

  • 获取值分为两种方式

    • 位置参数
      • 参数的位置不能错
    • 关键字参数
      • 参数的位置可以变,跟关键字保持一致即可
  • 注意:两种参数的方式不要混合使用,在一个正则表达式中只能使用一种参数方式

  • 分别使用以上两种获取URL值的方式提取出
    18 188

URL 配置

	# 根据url来获取数据
	#  http://127.0.0.1:8000/category_id/book_id/
	#  分组获取正则数据
	#  进行正则的数据会传递给视图
	#  定义视图的时候,需要变量来接收
	url(r'^(\d+)/(\d+)/$',detail)
	# url(r'^(?P<category_id>\d+)/(?P<book_id>\d+)/$',detail)

view配置
	def detail(request,category_id,book_id):
    	# 1/100/
    	print(category_id,book_id)
    	return HttpResponse("detail")

####################查询字符串##############################
"""
https://www.baidu.com/s?tn=02003390_43_hao_pg&isource=infinity&iname=baidu&itype=web&ie=utf-8&wd=itcast
以?为分割
?前表示 路由
?后表示 get方式查询 称之为 查询字符串

我们在登录的时候输入账号和密码,用户名和密码应该以post传递,只是为了让大家好理解,我们接下来用get传递用户名和密码

"""
	# params = request.GET
	# print(params)
	# user_name = params["username"]
	# pwd = params["password"]
	# QueryDict: {'password': ['123'], 'username': ['itcast']}
	# QueryDict 普通的字典形式获取一键一值的时候,只能获取到最后一个值
	# 我们想获取一键多值的话 我们需要使用QueryDict的list方法
	# users = params.getlist('username')
	# print(users)

#####################POST表单##################################
	# data = request.POST
	# print(data)

#####################POST JSON##################################
	# json 是双引号
"""
{
"name":"itcast"
}
"""
	# print(request.POST)
	# body = request.body
	# b'{\n    "name":"itcast",\n    "password":"123"\n    \n}'
	# body_str = body.decode()  # JSON形式的字符串
"""
{
"name":"itcast",
"password":"123"
    }
"""
	# json
	# json.dumps  将字典转换为JSON形式的字符串
	# json.loads  将json转换为字典

	# print(body_str)
	# print(type(body_str))
	# print('11111111111')
	# data = json.loads(body_str)
	# print(data)
#####################请求头##################################
	# print(request.META["CONTENT_TYPE"])
	# print(request.method)
	# return HttpResponse("detail")

#####################重定向##################################
    # 需求跳转到首页
    # 通过reverse 这个名字找到路径
    path = reverse('book:index')
    return redirect(path)
    # return redirect('/home/')
    # return redirect('http://www.itcast.com')

    #####################JsonResponse##################################
    from django.http import JsonResponse
    data = {"name": "itcast"}
    return JsonResponse(data)

    #####################HttpResponse##################################
    # data = {"name":"itcast"}
    # return HttpResponse(data)

    # 传递字符串 二进制数据 要传递 对象字典等数据

    # status状态码  HTTP status code must be an integer from 100 to 599.只能使用系统的

    # content_type 是一个MIME类型
    # 语法形式是:大类/小类
    # application/json
    # img/png img/jpg img/gif
    # return HttpResponse("detail", status=404)

状态保持

面试题:

你是如何理解cookie?/你谈一谈cookie?

    1.概念

    2.流程(大体流程,从http角度)

    3.在开发过程中哪里使用

    4.你在开发中遇到什么最深刻的地方

保存在客户端的数据叫做cookie

	cookie保存在客户端

	  cookie是基于域名的

1.流程

    第一次请求过程

    1.因为是第一次请求,所以就没有cookie信息

    2.服务器接收到请求后,没有cookie信息设置cookie信息

    3.cookie信息设置在响应中

    4.浏览器接收到这个响应后会发现响应中,有cookie信息 name=itcast,浏览器会将cookie信息保存到浏览器

第二次集齐之后过程

		5.浏览器第二次及集齐后的请求都会携带cookie信息

		6.服务器就会接收到请求携带的cookie信息 name=itcast,这样就认识是谁的请求了

2.看到效果

3.通过从http协议角度深度掌握cookie的流程(原理)

第一次请求

1.我们第一次去请求服务器的时候,没有携带如任何cookie信息,cookie信息实在请求头中携带

2.我们的服务器在响应中设置cookie,我们在响应头中发现set_cookie 这个信息

第二次集齐之后

3.第二次集齐之后的请求都会携带cookie信息 cookie信息实在请求头中

4.结合代码 当我们没有再设置cookie信息,我们就会发现没有任何set_cookie信息了

session

问题1:换了浏览器还能获取到session信息? 答案:不可以

问题2:我不换浏览器,删除sessionid 则获取不到session信息

问题3:再去执行set,会重新设置sessionid

session需要依赖于cookie

如果浏览器禁用了cookie,session就不能实现了

0.概念

1.流程

    第一次请求

        1.第一次请求的时候可以携带一些信息(用户名密码) cookie中没有任何信息

        2.当我们服务器接收到这个请求后,进行用户名和密码检查,检查没有问题可以设置session信息

        3.在设置session信息的同时(session会保存在服务器端),服务器会在响应头中设置一个sessionid的cookie信息

        4.浏览器(浏览器)在接收到这个响应之后,会将cookie的信息包存起来(保存sessionid的信息)

    第二次集齐请求

        5.第二次集齐之后的请求都会携带session_id信息

        6.当服务器接收到请求之后,会获取到sessionid信息然后进行验证,验证成功,则可以获取session信息

2.效果

3.从原理(http)

    第一次请求

		1.第一次请求是没有cookie信息的

		2.我在设置session的时候,设置seesion的时候其实session做了两件事,第一件将数据保存在数据库中,第二件生成设置cookie信息,是以seesionid 为 key cookie肯定会以响应的形式在响应头中

    第二次集齐之后

		3.第二次集齐之后的请求都会携带cookie信息 cookie信息中有sessionid,cookie在请求头中

类视图

登录页面

GET 请求获取登陆界面

POST 请求验证登陆(用户名和密码)

def show_login(request):

	return render(request)

def veri_login(request):

	return redirect('首页')

两个视图合并成一个

def login(request):

我们需要区分逻辑

	if request.method == 'GET':

GET 请求获取登录页面

    pass

else:

	请求验证登陆(用户名和密码)

    pass

面向对象

类视图 是采用的面向对象的思路

1.定义类视图

    1.继承自View

    2.不同的请求方式,有不同的业务逻辑

        类视图的方法 就直接采用http的请方式的名字,作为我们函数名,例如:get post put

    3.我们类视图方法的第二个必须是请求实例对象,类视图必须有返回,返回值是HttpResponse及其子类
    

2.类视图的url引导

	class LoginView(View):

		def get(self, request):

   			return HttpResponse("get")

	def post(self, request):
   			return HttpResponse("post")

	def put(self, request):
    	return HttpResponse('put')

	def oooo(self, request):
    	return HttpResponse('ooooo')

中间件

1 中间件的定义方法

定义一个中间件工厂函数,然后返回一个可以被调用的中间件。

中间件工厂函数需要接收一个可以调用的get_response对象。

返回的中间件也是一个可以被调用的对象,并且像视图一样需要接收一个request对象参数,返回一个response对象。

场景:

中间件的作用:每次请求和响应的时候都会调用

中间件的定义

中间件的使用:我们可以每次判断请求中是否携带了cookie中某些信息

在book里新建一个middleware.py文件

def simple_midleware(get_response):
# 这里是中间件第一次只想的地方
# print('1111111111111')
def middleware(request):
    # username = request.COOKIES.get('username')
    # if username is None:
    #     print('username is None')
    #     return HttpResponse("未登陆")
    # 请求前
    print("before request 1111111111111111")
    response = get_response(request)
    # 响应后
    print("after response 1111111111111111")
    return response
return middleware

def simple_midleware2(get_response):
    # print("222222222222222")
    def middleware(request):
        # username = request.COOKIES.get('username')
        # if username is None:
        #     print('username is None')
        #     return HttpResponse("未登陆")
        # 请求前
        print("before request 222222222222222")
        response = get_response(request)
        # 响应后
        print("after response 2222222222222222222")
        return response
    return middleware

setting注册:

# 请求前的执行顺序是按照注册的顺序执行的
# 请求后或者响应后的执行循序,是倒序
'book.middleware.simple_midleware',
'book.middleware.simple_midleware2'

主要判断每次判断请求中是否携带了cookie中某些信息,一般也不常用

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值