django笔记

  1. 学习Django的目的

    免费 开源 容易找工作  扩展性强  安全性强
  2. 我们该如何学习?

    1. 知道怎么接收参数? 接收什么参数?

      # 前端传来的参数
      get    查
      post   增
      put    改
      delete 删除
    2. 如何处理数据?

      	  截取 [1]  [2]  [3:6]
      			拆分  “a,b,c” = >['a','b','c']  
      			" abc     "  =>"abc"   rstrip  lstrip  strip
      			upper
      			lower
      		对列表的处理
      			 ['a','b','c']  => “a,b,c”   ",".join(["a","b","c"])
      			 截取      arr[0]   arr[0:1]
      			 range(0,3) =>  [0,1,2]
      			 arr = []
      			 for i in range(0,3):	
      			      arr.append(i)	
      			[i for i in range(0,3)]	 =>[0,1,2]  列表推导式
      
      		对字典的处理
      			{"a":1}       dict.get("a")推荐    dict["a"]
      		对集合的处理   天性/特点   去重  里面没有重复的元素
                              数据去重     /   ip统计  流量   /  百度竞价  30块钱左右  
                              
      		对元祖的处理
      			(123,)   (1,1,1,1,)  特性 : 元祖是带了枷锁的列表
    3. 如何操作数据库?oracle/mysql/sqlite/mongodb/pgsql

      查   select * from tableName where id = 29 order by id desc;
      增   insert into tableName(`name`,`age`) values('王聪',98),('董🏠兴',120);
      改   udpate tableName set age=2  where name='王聪';
      删   delete from tableName where id=1;
      # orm => 对象关系映射
      # orm 对应着 增删改查方法
      # 未完待续。。。。
    4. 如何给返回值?

      # 关键字
      return 
      # 返回值 有两种
      
      # 百度抗疫        返回的一个页面的信息 这里包括 css js 
      # 美多小程序      返回的是 几组数据  只是单纯的数据
    5. 细节进行学习

      # 只能看文档
      # 关注的点
      # 中间件 / 钩子函数 / hooks / 拦截器 
      # 内置方法 / 内建方法 / 辅助函数 / 公共函数
      # 过滤器   主要指的是前后端不分离 
  3. 准备工作

    1. 安装 django==2.1.14版本

      pip install django==2.1.14 -i https://pypi.douban.com/simple/

    2. 安装 pymysql

      pip install pymysql -i https://pypi.douban.com/simple/

    3. 查看一下 是否有安装的东西?

      pip list / django pymysql

  4. 创建一个项目

    1. 第一步 切换到你的工作目录,比如说D盘 ,在你的D盘下新建一个目录,比如说第一天Day01

    2. django-admin startproject 项目名

    3. 项目的基本架构

      └── mysite   
          ├── manage.py
          └── mysite
              ├── __init__.py
              ├── settings.py
              ├── urls.py
              └── wsgi.py
      • mysite 目录 , 项目目录
      • manage.py 命令行工具 未完待续。。。
      • 第二个 mysite 项目的根目录
        • __init__.py 模块 / 包
        • settings.py 项目配置
        • urls.py 路由
        • wsgi.py web服务器的入口 [web server gateway interface]
    4. 配置文件(常用的配置)

      • INSTALLED_APPS
      • MIDDLEWARE
      • TEMPLATES
      • DATABASES
      • LANGUAGE_CODE
      • TIME_ZONE
      • USE_TZ = False
      • STATIC_URL
    5. 路由的配置

      from django.contrib import admin
      from django.urls import path
      
      urlpatterns = [
          path('admin/', admin.site.urls),
      ]
    6. 启动项目 端口号建议 大于 8000

      python manage.py runserver

      • 如果报套接字的问题,请换一个端口试试。
      • 端口是有一个取值范围的 [0-65535],但是不能端口冲突,建议取的端口大于8000
      • python manage.py runserver 端口
      • 常用的端口
        • 80/443 http/https的默认端口
        • 22/21 ssh/ftp 的默认端口
        • 3306 mysql数据库的默认端口
        • 6379 redis的默认端口
        • 27017 mongodb的默认端口
    7. 在浏览器中输入地址 http://127.0.0.1:8000 成功的话显示一个小火箭

    8. 创建后台用户(也就是超级用户)

      1. 进行数据迁移 python manage.py createsuperuser 之后输入用户名/邮箱/密码/确认密码
      2. 输入地址 http://127.0.0.1:8000/admin
      3. 输入用户名和密码 即可进入
      总结
      1. 安装 drf

        pip install djangorestframework
      2. 将drf注册到django里

        INSTALL_APPS = [
          'rest_framework'
        ]
      3. 在视图中使用APIView和Response

        from rest_framework.views import APIView
        from rest_framework.response import Response
      4. 使用APIView

        class CategoryView(APIView):
          # 增加
          def post(self,request):
            pass
          
          # 删除
          def delete(self,request):
            pass
          
          # 更新
          def put(self,request):
            pass
          
          # 查询 
          def get(self,request):
            pass
      5. orm操作

        # 1 增加 返回值 成功的话就是新添加的对象  失败的话返回的就是None
        models.Category.objects.create(**data")
        # 2 删除 返回值 元祖 第一个元素就是受影响的行数
        models.Category.objects.filter(id=1).delete()
        # 3 更新 返回值 受影响的行数 
        models.Category.objects.filter(id=1).update(**data)
        # 4 查询  all   first
        models.Category.objects.all() # 查询所有
        models.Category.objects.first() # 查询单个值
      6. 序列化和反序列化

        from rest_framework import serializers
        from . import models
        # 序列化  读库并且转成json给前端
        class CategorySerializer(serializers.ModelSerializer):
          
          class Meta:
            # 指定模型
            model = models.Category
            # 指定可显示的字段
            fields = '__all__'
        # 反序列化  入库的过程 包括添加和更新
        class CategoryUnserializer(serializers.Serializer):
          # 约束条件
          name = serializers.CharField(max_length=32)
          
          # 添加操作
          def create(self,data):
            return models.Category.objects.create(**data)
          
          # 更新操作 
          def update(self,instance,data):
            return instance.update(**data)
         
      7. 如何使用序列化和反序列化

        from .serializer import *
        
        # 序列化
        # 1 获取所有的数据
        cateobj = models.Category.objects.all()
        # 2 进行序列化
        obj = CategorySerializer(cateobj,many=True)
        # 3 将序列化后的数据返回给前端
        data = obj.data
        
        # 反序列化添加
        # 构造数据
        data = {
          "name":"xxxx"
        }
        # 准备
        obj = CategoryUnserializer(data=data)
        # 判断约束
        if obj.is_valid():
          # 约束成功验证的话,我们需要调用save方法 并且得到返回值
          flag = obj.save()
          if flag:
            return Response({"code":1000,"msg":"添加成功"})
          return Response({"code":1002,"msg":"添加失败"})
        # 打印错误信息
        print(obj.errors)
        return Response({"code":1001,"msg":"参数错误"})
        
        # 反序列化更新
        # 构造数据
        data = {
          "name":"xxxx"
        }
        # 准备
        instance = models.Category.objects.filter(id=1)
        obj = CategoryUnserializer(instance=instance,data=data)
        # 判断约束
        if obj.is_valid():
          # 约束成功验证的话,我们需要调用save方法 并且得到返回值
          flag = obj.save()
          if flag:
            return Response({"code":1000,"msg":"更新成功"})
          return Response({"code":1002,"msg":"更新失败"})
        # 打印错误信息
        print(obj.errors)
        return Response({"code":1001,"msg":"参数错误"})
      8. 分页

        # 1 导包
        from django.core.paginator import Paginator
        
        # 2 获取所有的数据
        cateobj = models.Category.objects.all()
        
        # 3 实例化分页类
        page_obj = Paginator(cateobj,per_page=3)
        
        # 4 获取分页的范围  例如 [1,2,3,4]
        page = [i for i in page_obj.page_range]
        
        # 5 获取当前页的数据
        page_data = page_obj.page(p) # p 就是当前页,而且是int类型的值
        
        # 6 判断是否有上一页
        previous = page_data.has_previous()
        
        # 7 判断是否有下一页
        next = page_data.has_next()
        
        # 8 首页的数据
        page_data = page_obj.page(1)
        
        # 9 尾页的数据
        page_data = page_obj.page(page.pop())
        
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值