【Django开发】基本Django知识

1、Django的request和response对象

Request对象

  • 请求方法:Request对象的method属性
  • 客户端信息:Request对象的META属性
  • Cookies: Request对象的COOKIES属性
  • 请求参数:Request对象中的QueryDict
from django.http import HttpResponse
def helloworld(request):
    print('request method: ',request.method)
    print('request META:',request.META)
    print('request cookies: ',request.COOKIES)
    print('request QueryDict',request.GET)
    return HttpResponse('OK')

请求路由目录

#在主目录下的urls
		urlpatterns = [
    path('admin/', admin.site.urls),
    path('weather/', include('blog.urls')),
]
#在对应app下的路由
from django.urls import path
from .view import weather

urlpatterns=[
    path('',weather.helloworld)
]

Response对象

  • 状态码:Response对象的status属性
  • 应答内容:Response对象的content属性
  • 延申的Response子类:(JsonResponse,FileResponse)
    根据对应的数据进行应答操作
#首先都是从django.http中引入对应的包
from django.http import HttpResponse,JsonResponse,FileResponse
#http应答
    #应答都是使用3位数字来表示
     return HttpResponse(content='Hello Django response',status=201)
#json应答
 m={
        "message":"Hello Django Response"
    }
    #safe=False 不检查任何Json对象,将任何对象转为json
    #safe=true 只能转换为dictionary对象
    return JsonResponse(data=m,safe=False,status=200)

实战天气查询

在这里插入图片描述
首先引入第三方库记录对应函数:

#其实我的理解这部分就相当于后台的操作
def weather(cityname):
    # :param cityname:城市名字
    # :return:返回实况天气
    key='e3c87accfae6bd943172c97743fdff65'
    api='http://v.juhe.cn/weather/index'
    params='cityname=%s&key=%s'%(cityname,key)
    url=api+'?'+params
    print(url)
    response=requests.get(url=url)
    json_data=json.loads(response.text)
    print(json_data)
    result=json_data.get('result')
    sk=result.get('sk')
    response=dict()
    response['temperature']=sk.get('temp')
    response['wind_direction'] = sk.get('wind_direction')
    response['wind_strength'] = sk.get('wind_strength')
    response['humidity'] = sk.get('humidity')
    response['time'] = sk.get('time')
    return response

然后修改对应的weather下的路由

urlpatterns=[
    # path('',weather.helloworld)
path('',weather.weather)
]

之后在前端根据访问类型不同定义访问函数
我自己的理解是get只能经详一次获得对应的文件
而post是可以给参数多样化进行传递的

def weather(request):
    if request.method=='GET':
        city=request.GET.get('city')
        data=juhe.weather(city)
        return JsonResponse(data=data,status=200)
    elif request.method=='POST':
        received_body=request.body
        received_body=json.loads(received_body)
        cities=received_body.get('cities')
        response_data=[]
        for city in cities:
            result=juhe.weather(city)
            result['city']=city
            response_data.append(result)
        return JsonResponse(data=response_data,safe=False,status=200)

2、Django的url配置

Django处理请求的寻址逻辑

在这里插入图片描述

  • 项目层面——根路由模块:urlpatterns数组
  • 应用层面——子路由模块:urlpatterns数组
  • 试图层面调用正确的视图层面
#【1】首先在django下的settings中可以看到
ROOT_URLCONF = 'Django1.urls'
#【2】然后进入Django1.urls可以看到
urlpatterns = [
    path('admin/', admin.site.urls),
    path('weather/', include('blog.urls')),
]
#【3】然后进入子路由模块'blog.urls'
urlpatterns=[
    # path('',weather.helloworld)
path('',weather.weather)
]

Django的RESTful url设计

调用者RESTful简单易读
开发者容易设计结构
  • API接口的RESTful设计](https://img-blog.csdnimg.cn/20191128113214101.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQwODM2MjI0,size_16,color_FFFFFF,t_70)
    要进行对API接口的说明
    • 说明接口类型(视图/view,模板/template,API/api)
    • 说明接口版本 /view/v1/template/v1.2/api/v2.0.1
  • 增删改查RESTful设计
    HTTP请求中的GET、POST、PUT、DELETE方法
请求方法作用
GET从服务器中获取资源
POST在服务器中新建一个资源
PUT在服务器上更新资源
DELETE从服务器中删除资源

距离获取用户信息:GET:/api/v1.0/user
url的过滤信息(分页、指定)
GET:/api/v1.0/user/1
GET:/api/v1.0/user?page=1
通过请求参数过滤信息
GET:/api/v1.0/user?name=imooc

  • 资源路径的RESTful设计
    说明资源类型,也可以附上更加丰富的信息类型
    GET:/api/v1.0/resource/image?md=<md5>
    GET:/api/v1.0/resource/doc?md=<md5>
    在这里插入图片描述
#【1】首先在django下的settings中可以看到
ROOT_URLCONF = 'Django1.urls'
#【2】然后进入Django1.urls可以看到
urlpatterns = [
    path('admin/', admin.site.urls),
    # path('weather/', include('blog.urls')),
    path('blog/v1.0', include('Django1.version_1.0')),
]
#【3】然后在version_1.0中进入'
urlpatterns = [
    path('service/', include('blog.urls')),
    # path('weather/', include('blog.urls')),
]
#【4】最后来到blog目录下的urls进入
urlpatterns=[
    # path('',weather.helloworld)
# path('',weather.weather)
    path('weather',weather.weather)
]

在这里插入图片描述

post——新增
put——修改
get——查询
delete——删除

通过类视图的方式管理视图进行操作
在这里插入图片描述
在这里插入图片描述

有状态服务

有状态服务,无状态服务

有记忆的凭证保存
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
数据上下文
session 凭证
HTTP中协议的凭证

小程序中的状态管理
在这里插入图片描述
sessions配置

在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述
自建用户体系比较复杂
沿用微信的用户体系——openID去开发用户

用户模型与用户视图

用户的唯一标识——openid
用户的基本信息(nickname)

在model下建立对应模型
其实就是以类的方式进行保存

需要进行数据库的迁移
python manage.py makemigrations
检查数据模型发生变化了没
python manage.py migrate
对数据模型进行修改
在这里插入图片描述
dbshell 数据库操作实现

模型层

在这里插入图片描述
在这里插入图片描述
Xampp——全家桶的Mysql工具
Navicat——数据管理工具

二、数据库迁移
1、迁移的必要性

数据库无法打开
通过xammp去打开对应SQL区
但必须对应迁移

2、Django ORM框架

在这里插入图片描述
①、屏蔽数据库差异
②、提供迁移工具
③、简化开发流程
迁移的过程
数据+表结构迁移
①、数据备份

python manage.py dumpdata authorization >authorization_data.json

②、表结构同步
创建MySQL数据库更新配置
先将创建的注释掉再修改
在这里插入图片描述
slave数据库只有default数据库失败了之后才能继续使用该数据库,slave数据库是一个备份数据库,但是数据之间是可以完成对应同步操作的
在这里插入图片描述
在这里插入图片描述
③、数据迁移
将数据备份导入mysql中就可以继续使用对应的mysql数据库信息就可以
在这里插入图片描述
在这里插入图片描述

索引

在这里插入图片描述
索引特征
1、加快检索数据速度
2、降低增删改查速度
在这里插入图片描述
添加索引的方法
A、属性中定义索引
通过db_index=true进行索引
任何数据库操作后都需要对应的实现
在这里插入图片描述
B、模型中定义Meta中定义索引
class Meta:
indexes = [
models.Index(fields=[‘nickname’]),
models.Index(fields=[‘open_id’,‘nickname’]),
}

主键默认索引
外键默认索引

关系映射

三种关系映射
一对一关系
一对多映射
多对多关系
Django表达关系映射
在这里插入图片描述

// 删除father后mother不删除
class Father(models.Model):
	wife=models.OneToOneField(Mother,on_delete=models.DO_NOTHING)
pass

在这里插入图片描述

数据库操作


创建用户操作
首先配置django环境,然后有两种方式添加对应用户
在这里插入图片描述
批量插入方法
bulk_create方法
在这里插入图片描述
查:
在这里插入图片描述

数据过滤:

在这里插入图片描述

数据排序

在这里插入图片描述

连续查询

在这里插入图片描述

在这里插入图片描述
批量改

在这里插入图片描述

删除与批量删除

在这里插入图片描述
全部删除
在这里插入图片描述

数据库函数

字符串连接函数
在这里插入图片描述
字符长度函数
在这里插入图片描述
大小写函数
在这里插入图片描述
日期处理函数
获取当前时间
Now()函数
在这里插入图片描述
Trunc函数按某天或者某月操作
在这里插入图片描述
在这里插入图片描述

数据库的模型层优化

在这里插入图片描述

1、模型变更与迁移

模型迁移操作
** A、模型变更——用户层面
B、makemigrations——DJango层面
migrations下保存模型的更改(时间操作实现)
C、migrate——DB层面 **

迁移命令
在这里插入图片描述
在这里插入图片描述
显示操作的SQL语句
在这里插入图片描述
历史迁移记录在这里插入图片描述
迁移文件详解
dependencies,指明迁移的依赖
operations:指明迁移的具体操作
在这里插入图片描述
在这里插入图片描述

懒加载与预加载

懒加载问题根源
1、ORM的不透明性
在这里插入图片描述
2、懒加载是什么
在这里插入图片描述在这里插入图片描述
预加载方法
在这里插入图片描述
会提前加载属性
在这里插入图片描述
性能对比
预加载的数据会更快一点,预加载要比懒加载快的太多了
在这里插入图片描述

数据库长连接

长连接数据逻辑
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
避免负优化
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可调用(可通过函数方式调用);不可调用就是不可以被函数方式调用
可调用属性是可以通过设置python变量,然后使用变量去优化
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
批量操作

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值