Djang工程搭建基础2

1,类视图(掌握)
  • 作用: 使用类的方式来提供视图的功能

  • 好处:

    • 1, 可读性更好
    • 2, 提供代码的复用性
  • 使用流程:

    • 1, 在子应用的views中定义类视图

      #1,编写类视图处理业务
      class RegisterView(View):
      
          def get(self,request):
      
              print(request.GET)
      
              return HttpResponse("RegisterView get")
      
      
          def post(self,request):
      
              print(request.GET)
              print(request.body)
      
              return HttpResponse("RegisterView post")
      
      
    • 2, 在子应用的urls文件中定义好路径(路由)

      from django.conf.urls import url
      from . import views
      
      
      urlpatterns = [
      
          #1,编写类视图处理业务,
          url(r"^register/$",views.RegisterView.as_view())
      ]
      
    • 3, 将子应用的urls文件,设置到根应用中

      url(r'^', include('booktest.urls'))
      
2,类视图原理(理解)

Xnip2019-03-07_09-48-35

3,类视图增加装饰器(了解)
  • 作用: 给已经存在的类视图,增加额外的功能

  • 装饰的过程有两种:

    • 方式一:

      • 1, 定义好装饰器

      • 2,在url路径中使用装饰器进行装饰

        views.py
        # 定义装饰器
        def user_login_data(view_func):
            def wrapper(request,*args,**kwargs):
        
                #可以实现用户数据的封装
                print(request.method)
        
                return view_func(request,*args,**kwargs)
        
            return wrapper
        
        urls.py
        #2,给类视图增加装饰器,给RegisterView2返回的view装饰即可
        url(r"^register2/$",views.user_login_data(views.RegisterView2.as_view())),
        
    • 方式二:

      • 1,定义好装饰器

      • 2,使用系统提供的method_decorator装饰器方法装饰

        # 定义装饰器
        def user_login_data(view_func):
            def wrapper(request,*args,**kwargs):
        
                #可以实现用户数据的封装
                print(request.method)
        
                return view_func(request,*args,**kwargs)
        
            return wrapper
        
        #3,给类视图增加装饰器,方式二,使用系统提供的method_decrator方法
        # @method_decorator(user_login_data,name="get")
        # @method_decorator(user_login_data,name="post")
        @method_decorator(user_login_data,name="dispatch") #该类视图中的所有请求方法都会装上
        class RegisterView3(View):
        
            # @method_decorator(user_login_data)
            def get(self,request):
        
                print("RegisterView3 get")
        
                return HttpResponse("RegisterView3 get")
        
            # @method_decorator(user_login_data)
            def post(self,request):
        
                print("RegisterView2 post")
        
                return HttpResponse("RegisterView3 post")
        
4,中间件(了解)
  • 作用: 类似于flask中的请求钩子,在请求的前后做对应的处理,比如: 数据库的链接,参数的校验, 统一数据的格式返回

    • 1, 创建文件

    • 2,在文件中编写中间件函数(装饰器)

    • 3,将装饰器注册到settings.py的中间件中

      middleware.py文件
      def my_middleware(view_func):
      
          print("1, init")
      
          def wrapper(request):
      
              print("1, before_request")
      
              #在这里就可以取校验参数
      
              response = view_func(request)
      
              print("1, after_request")
      
              return response
      
          return wrapper
      
      
      #中间件(settings.py)
      MIDDLEWARE = [
          ...
          'booktest.middleware.my_middleware',
          'booktest.middleware.my_middleware2',
          'booktest.middleware.my_middleware3',
      ]
      
      

      Xnip2019-03-07_10-50-01

5,模板(了解)
  • 作用: 用来渲染数据的

  • 使用流程:

    • 1, 使用loader对象,获取模板

    • 2,使用模板渲染页面

    • 3,返回响应,携带模板页面

      #4,使用模板渲染数据
      class TempView(View):
      
          def get(self,request):
      
      
              #一, 完整写法:
              """
              # - 1, 使用loader对象,获取模板
              template = loader.get_template("file01.html")
      
              # - 2,使用模板渲染页面
              file_data =  template.render()
      
              # - 3,返回响应,携带模板页面
              return HttpResponse(file_data)
              """
      
              #二,简化写法
              return render(request,"file01.html")
      
      
    • 注意点,需要设置模板的文件夹路径settings.py

      'DIRS': [os.path.join(BASE_DIR,"templates")],
      
6,数据库配置(掌握)
  • 作用: 让django程序能够去操作数据库

  • 配置内容

    #数据库配置
    DATABASES = {
          
          
        'default': {
          
          
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'python10',
            'USER': 'root',
            'PASSWORD': '123456',
            'HOST': '127.0.0.1',
            'PORT': '3306',
        }
    }
    
    
  • 注意点: 需要自己在终端中创建数据库

7,图书模型类(理解)
8,英雄模型类(理解)
9,数据库迁移,添加测试数据(掌握)
  • 创建流程
    • 1,在子应用的models中定义模型类文件
    • 2,需要将子应用注册到settings的install_apps中
    • 3,然后在迁移
  • 迁移成功的绝招
    • 1, 保证虚拟环境中django的版本是1.11.11
      • 注意点: ubuntu默认的版本是1.8.7
      • 解决: pip install django==1.11.11 就会覆盖1.8.7
    • 2,定义好模型类之后,需要将模型类注册到settings文件中
      • image-20190307160605671
    • 3,保证使用的数据库驱动是pymysql
      • image-20190307160659333
    • 4,执行迁移命令
10,数据库日志信息查看(理解)
  • 1, 进入到终端中

​ python manage shell

  • 2, 修改数据库日志信息记录文件

    sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
    放开68,69行
    
    
    
    
  • 3,监控日志的运行

    • tail -f /var/log/mysql/mysql.log
      如果不能监控,加上sudo
      如果还监控不了,重启数据库 sudo service mysql restart
      
      
11,添加数据(掌握)
12,基本查询(掌握)
13,FQ对象查询(理解)
14,关联查询(理解)
15,数据库修改,删除(掌握)
16,惰性,缓存,限制(理解)

猜你喜欢

转载自blog.csdn.net/weixin_44774466/article/details/88555042