Django day02

  1. 请求

    1. request.GET #查询字符串的数据
    2. Request.POST # post请求的表单数据
    3. request.body # 其他请求体数据
    4. request.META #请求头部的数据
    5. 请求对象.method/user/path/…
  2. 响应

    1. 4种响应方式
  3. session和cookie

    如何操作cookie和session

  4. 类视图

    1. 类视图定义
    2. 理解类视图请求时的分发
    3. 装饰器
      1. url路径
      2. 类上面或者类方法上进行装饰
      3. 扩展类装饰(多继承mro)

问题

  1. get请求可以,但是post请求报错

  2. 没有在INSTALLED_APPS中注册应用,但是仍然可以使用

  3. redirect跳转问题

响应

1. HttpResponse

#第一种方式设置响应对象
HttpResponse(content=响应体, content_type=响应体数据类型, status=状态码)
content_type='Application/json'/'image/jpg'

#第二种方式设置响应对象
response = HttpResponse()
response.content='data'
response.status_code = 200/300/400/500
响应头设置
response = HttpResponse()
response['food1'] = 'hotdrynoodles'  # 自定义响应头food1, 值为hotdrynoodles

2. HttpResponse子类

Django提供了一系列HttpResponse的子类,可以快速设置状态码

  • HttpResponseRedirect 301
  • HttpResponsePermanentRedirect 302
  • HttpResponseNotModified 304
  • HttpResponseBadRequest 400
  • HttpResponseNotFound 404
  • HttpResponseForbidden 403
  • HttpResponseNotAllowed 405
  • HttpResponseGone 410
  • HttpResponseServerError 500

3. JsonResponse

作用
  • 帮助我们将数据转换为json字符串
  • 设置响应头Content-Typeapplication/json
使用
from django.http import JsonResponse

def demo_view(request):
    return JsonResponse({'city': 'beijing', 'subject': 'python'},status=xxxx)

4. redirect重定向

from django.shortcuts import redirect

def demo_view(request):
    return redirect(reverse('users:say'))

Cookie

1. 设置cookie

Cookie是服务器端设置,存储在浏览器中的一段纯文本信息

语法

HttpResponse.set_cookie(cookie名, value=cookie值, max_age=cookie有效期)

应用

def demo_view(request):
    response = HttpResponse('ok')
    response.set_cookie('itcast1', 'python1')  # 临时cookie
    response.set_cookie('itcast2', 'python2', max_age=3600)  # 有效期一小时
    return response

2. 读取cookie

def demo_view(request):
    cookie1 = request.COOKIES.get('itcast1')
    print(cookie1)
    return HttpResponse('OK')

Session

查看sqllite数据库之前需要操作
#进入项目
python manage.py makemigrations   # 生成迁移文件
python manage.py migrate    #执行迁移文件

1. 存储方式

数据库

默认存储在SQLlite

SESSION_ENGINE='django.contrib.sessions.backends.db'

需要生成迁移文件,执行迁移文件生成数据表。系统已经有默认的迁移文件不需要生成。

python manage.py makemigrations	    #生成迁移文件
python manage.py migrate			#执行迁移文件
本地缓存
SESSION_ENGINE='django.contrib.sessions.backends.cache'
混合存储
SESSION_ENGINE='django.contrib.sessions.backends.cached_db'
Redis

1) 安装扩展

pip install django-redis

2)配置

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"

**补充: ** redis以守护进程方式启动 在配置文件中修改如下配置

136 daemonize yes    # 默认为no改为yes

类视图

定义

from django.views.generic import View

class RegisterView(View):
    """类视图:处理注册"""

    def get(self, request):
        """处理GET请求,返回注册页面"""
        return render(request, 'register.html')

    def post(self, request):
        """处理POST请求,实现注册逻辑"""
        return HttpResponse('这里实现注册逻辑')

使用

urlpatterns = [
    # 视图函数:注册
    # url(r'^register/$', views.register, name='register'),
    # 类视图:注册
    url(r'^register/$', views.RegisterView.as_view(), name='register'),
    # view --->.  dispatch
]

类视图装饰器

1. URL配置装饰器

urlpatterns = [
    url(r'^demo/$', my_decorate(DemoView.as_view()))
]

2. 类视图中装饰

  1. 为特定方法添加装饰器,重写dispatch方法

    class DemoView(View):
        @method_decorator(my_decorator)	 # 为所有方法添加装饰器
        def dispatch(self, request, *args, **kwargs):
            return super().dispatch(request, *args, **kwargs)
        
        # 为特定请求方法添加装饰器
        #@method_decorator(my_decorator)  # 为get方法添加了装饰器
        def get(self, request):
            print('get方法')
            return HttpResponse('ok')
    
        #@method_decorator(my_decorator)  # 为post方法添加了装饰器
        def post(self, request):
            print('post方法')
            return HttpResponse('ok')
    
        def put(self, request):  # 没有为put方法添加装饰器
            print('put方法')
            return HttpResponse('ok')
    
  2. 在类上面添加装饰器

    @method_decorator(my_decorator, name='get')
    @method_decorator(my_decorator, name='dispatch')
    class DemoView(View):
    
        def get(self, request):
            return HttpResponse('get page')
    
        def post(self, request):
            return HttpResponse('post page')
    
  3. 修改函数装饰器为方法装饰器

    def my_decorator_for_class(view_func):
        def wrapper(self, request, *args, **kwargs):
            print('装饰器被调用')
            print(request.path)
            return view_func(self, request, *args, **kwargs)
    
        return wrapper
    
    
    class DemoView(View):
        @my_decorator_for_class
        def get(self, request):
            return HttpResponse('get page')
    
        def post(self, request):
            return HttpResponse('post page')
    

3. 扩展类

多继承—》mro原则

class ListModelMixin(object):
    """
    list扩展类
    """
    def list(self, request, *args, **kwargs):
        ...

class CreateModelMixin(object):
    """
    create扩展类
    """
    def create(self, request, *args, **kwargs):
        ...

class BooksView(CreateModelMixin, ListModelMixin, View):
    """
    同时继承两个扩展类,复用list和create方法
    """
    def get(self, request):
        self.list(request)
        ...

    def post(self, request):
        self.create(request)
        ...

class SaveOrderView(CreateModelMixin, View):
    """
    继承CreateModelMixin扩展类,复用create方法
    """
    def post(self, request):
        self.create(request)
        ...

中间件

中间件定义

def simple_middleware(get_response):
    # 此处编写的代码仅在Django第一次配置和初始化的时候执行一次。

    def middleware(request):
        # 此处编写的代码会在每个请求处理视图前被调用。

        response = get_response(request)

        # 此处编写的代码会在每个请求处理视图之后被调用。

        return response

    return middleware

中间件使用

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',
    'users.middleware.simple_middleware',  # 添加中间件
]

中间件说明

中间件 === 钩子程序

前置钩子 # 视图执行前

后置钩子 # 视图执行后

python023基于Python旅游景点推荐系统带vue前后端分离毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值