-
学习Django的目的
免费 开源 容易找工作 扩展性强 安全性强
-
我们该如何学习?
-
知道怎么接收参数? 接收什么参数?
# 前端传来的参数 get 查 post 增 put 改 delete 删除
-
如何处理数据?
截取 [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块钱左右 对元祖的处理 (1,2,3,) (1,1,1,1,) 特性 : 元祖是带了枷锁的列表
-
如何操作数据库?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 对应着 增删改查方法 # 未完待续。。。。
-
如何给返回值?
# 关键字 return # 返回值 有两种 # 百度抗疫 返回的一个页面的信息 这里包括 css js # 美多小程序 返回的是 几组数据 只是单纯的数据
-
细节进行学习
# 只能看文档 # 关注的点 # 中间件 / 钩子函数 / hooks / 拦截器 # 内置方法 / 内建方法 / 辅助函数 / 公共函数 # 过滤器 主要指的是前后端不分离
-
-
准备工作
-
安装
django==2.1.14
版本pip install django==2.1.14 -i https://pypi.douban.com/simple/
-
安装
pymysql
pip install pymysql -i https://pypi.douban.com/simple/
-
查看一下 是否有安装的东西?
pip list
/ django pymysql
-
-
创建一个项目
-
第一步 切换到你的工作目录,比如说D盘 ,在你的D盘下新建一个目录,比如说第一天Day01
-
django-admin startproject 项目名
-
项目的基本架构
└── 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]
-
配置文件(常用的配置)
INSTALLED_APPS
MIDDLEWARE
TEMPLATES
DATABASES
LANGUAGE_CODE
TIME_ZONE
USE_TZ
= FalseSTATIC_URL
-
路由的配置
from django.contrib import admin from django.urls import path urlpatterns = [ path('admin/', admin.site.urls), ]
-
启动项目 端口号建议 大于 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的默认端口
-
在浏览器中输入地址
http://127.0.0.1:8000
成功的话显示一个小火箭 -
创建后台用户(也就是超级用户)
- 进行数据迁移
python manage.py createsuperuser
之后输入用户名/邮箱/密码/确认密码 - 输入地址
http://127.0.0.1:8000/admin
- 输入用户名和密码 即可进入
总结
-
安装 drf
pip install djangorestframework
-
将drf注册到django里
INSTALL_APPS = [ 'rest_framework' ]
-
在视图中使用APIView和Response
from rest_framework.views import APIView from rest_framework.response import Response
-
使用APIView
class CategoryView(APIView): # 增加 def post(self,request): pass # 删除 def delete(self,request): pass # 更新 def put(self,request): pass # 查询 def get(self,request): pass
-
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() # 查询单个值
-
序列化和反序列化
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)
-
如何使用序列化和反序列化
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":"参数错误"})
-
分页
# 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())
- 进行数据迁移
-
django笔记
最新推荐文章于 2022-10-03 11:10:28 发布