Django视图

python编程快速上手(持续更新中…)

HttpRequest对象

1、url路径参数

http:127.0.0.1:8000/10/188

视图中函数,参数位置不能变

def shop(request,city_id,shop_id):
# print(cat_id, goods_id)
return JsonResponse({‘city_id’:city_id, ‘shop_id’:shop_id})

应用中的urls

path(’<city_id>/<shop_id>/’,shop),

http://127.0.0.1:8000/1/2/?order=readcount&page=1&order=commentcount

def shop(request,city_id,shop_id):
query_params = request.GET
print(query_params)
print(query_params.get(‘order’))
print(query_params.getlist(‘order’))
return JsonResponse({‘city_id’:city_id, ‘shop_id’:shop_id})

2、post请求

403
默认禁止访问,禁用middleware
在这里插入图片描述

3、发送post数据

def json(request):
    body = request.body
    print(body)
    
    body_str = body.decode()
    print(body_str)

    return HttpResponse('ok')

4、请求头

header = request.META
print(header)

5、路径参数校验

path(‘int:city_id/<shop_id>/’,shop),

6、自定义转换器

# 1. 定义转换器
class MobileConverter:
    # 验证数据的关键是: 正则
    regex = '1[3-9]\d{9}'

    # 验证没有问题的数据,给视图函数
    def to_python(self, value):
        return value

register_converter(MobileConverter,'phone')


path('<int:city_id>/<phone:shop_id>/',shop),

HttpResponse对象

1、响应结果

def response(request):

    response = HttpResponse('res', status=200)
    response['name']='张三'
    # 1XX
    # 2XX
    #     200 成功
    # 3XX
    # 4XX 请求错误
    #     403 禁止访问,权限问题
    #     404 找不到页面,路由问题
    #
    # 5XX 响应错误
    return response;

2、JsonResponse

dict = {‘name’:‘zhangsan’, ‘age’:18}
response = JsonResponse(dict)

集合


girls = [
    {
        'name':'xiaoli',
         'age':18
    },
    {
        'name':'cunhua',
        'age':'17'
    }
]

response = JsonResponse(data=girls, safe=False)

3、redirect重定向

return redirect(‘www.baidu.com’)

状态保持

Cookie

http://127.0.0.1:8000/set_cookie/?username=ls&password=123

def set_cookie(request):
    # 1. 获取查询字符串数据
    username = request.GET.get('username')
    password = request.GET.get('password')
    print(username, password)

    # 2. 服务器设置cookie信息
    # 通过响应对象.set_cookie 方法
    response = HttpResponse('set_cookie')

    # key, value=''
    # max_age 是一个秒数 从响应开始 计数的一个秒数
    response.set_cookie('name', username, max_age=60*60)
    response.set_cookie('password', password)
    return response

http://127.0.0.1:8000/get_cookie

def get_cookie(request):
    # 获取cookie

    print(request.COOKIES)
    # request.COOKIES 字典数据
    name = request.COOKIES.get('name')
    return HttpResponse(name)

session

session 操作

新增

request.session[‘key1’]=val1

读取

request.session.get(‘key1’)

清除所有session值

request.session.clear()

清除所有session值,包括key

request.session.flush()

删除指定key中的值
del.requset.session[‘key1’]

设置session有效期 0:浏览器关闭后失效,

request.session.set_expiry(val1)

应用:
http://127.0.0.1:8000/set_session/?username=zs

def set_session(request):
    # 1. 模拟 获取用户信息
    username = request.GET.get('username')

    # 2. 设置session信息
    # 假如 我们通过模型查询 查询到了 用户的信息
    user_id = 1
    request.session['user_id'] = user_id

    request.session['username'] = username

    # clear 删除session里的数据,但是 key有保留
    # request.session.clear()
    # flush 是删除所有的数据,包括key
    # request.session.flush()

    request.session.set_expiry(3600)

    return HttpResponse('set_session')

http://127.0.0.1:8000/get_session/

def get_session(request):

    # user_id=request.session['user_id']
    # username=request.session['username']
    
    # 获取字典的时候,尽量用get,减少异常发生
    user_id=request.session.get('user_id')
    username=request.session.get('username')

    # '%s'%username
    content = '{} ,{}'.format(user_id,username)

    return HttpResponse(content)

session保存redis中

1、安装django-redis

pip install django-redis

2、配置

在settings.py文件中做如下设置

#################session 保存在redis中######################
CACHES = {
    'default': {
        'BACKEND': 'django_redis.cache.RedisCache',
        'LOCATION': 'redis://127.0.0.1:6379/1',
        'OPTIONS': {
            'CLIENT_CLASS': 'django_redis.client.DefaultClient',
        }
    }
}
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
SESSION_CACHE_ALIAS = 'default'

3、设置session

http://127.0.0.1:8000/set_session/?username=zs

4、查询

http://127.0.0.1:8000/get_session/

类视图定义

使用类定义视图,成为类视图

1、类视图定义

"""
类视图的定义

class 类视图名字(View):
    
    def get(self,request):
        
        return HttpResponse('xxx')
    
    def http_method_lower(self,request):
    
        return HttpResponse('xxx')
        
1. 继承自View
2. 类视图中的方法 是采用 http方法小写来区分不同的请求方式
"""
from django.views import View

class LoginView(View):


    def get(self,request):

        return HttpResponse('get get get')


    def post(self,request):


        return HttpResponse('post post post')

2、使用:http://127.0.0.1:8000/163login/

urls

from book.views import LoginView

#########################类视图
path('163login/', LoginView.as_view())

3、405请求方式不准许

posman put 请求

4、as-view()为什么加’()’

在这里插入图片描述

类试图与中间件

as_view()源码介绍

dispatch

登录验证

1、创建登录用户

python manager.py createsuperuser

2、OrderView

"""
我的订单、个人中心页面
如果登录用户 可以访问
如果未登录用户 不应该访问,应该跳转到登录页面

定义一个订单、个人中心 类视图

如果定义我有没有登录呢??? 我们以登录 后台站点为例
"""
from django.contrib.auth.mixins import LoginRequiredMixin

# LoginRequiredMixin 作用 判断 只有登录用户才可以访问页面

# class OrderView(View,LoginRequiredMixin):
class OrderView(LoginRequiredMixin,View):

    def get(self,request):

        #模拟了一个标记位
        # isLogin=False
        # if not isLogin:
        #     return HttpResponse('你没有登录,跳转到整理页面中~~~~')

        return HttpResponse('GET 我的订单页面,这个页面必须登录')

    def post(self,request):
        return HttpResponse('POST 我的订单页面,这个页面必须登录')

中间件

请求与响应中间事件

常用方式

Init
Process-request
Process_response

1、定义中间件

from django.utils.deprecation import MiddlewareMixin
class TestMiddleWare(MiddlewareMixin):


    def process_request(self,request):
        print("111111111111111每次请求前 都会调用执行")

        # username=request.COOKIES.get('name')
        # if username is None:
        #     print("没有用户信息")
        # else:
        #     print("有用户信息")


    def process_response(self,request,response):
        print("每次响应前 都会调用执行111111111111111111111111")

        return response

2、注册中间件

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

    #注册中间件
    'book.middleware.TestMiddleWare',
]

3、顺序
请求由上往下,响应由下往上

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值