IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Django实用功能汇总 -> 正文阅读

[Python知识库]Django实用功能汇总

hello world

创建django项目

django-admin startproject 项目名称

启动

python manage.py runserver

此时项目进程就会默认监听8000端口

如果想更换端口,可以使用以下命令:

python manage.py runserver 8080

如果想更换ip,可以使用以下命令:

python manage.py runserver 0.0.0.0:8080

路由

主路由

所谓路由,通俗理解就是http请求中uri与对应处理函数的映射关系。

在创建项目中 urls.py 中可以配置主路由信息。
在view.py中配置路由处理函数:

from django.http import HttpResponse


def index(request):
    return HttpResponse("Hello, world. You're at the polls index.")

在urls.py中配置映射关系

from django.contrib import admin
from django.urls import path
from .view import index

urlpatterns = [
    path('admin/', admin.site.urls),
    path('index/', index),
]

path转换器

path假如里面有个参数可变的怎么办?
如:
page/1,page/2,page/100
这时候就需要用到path转换器

from django.http import HttpResponse


def index(request,page):
    return HttpResponse("Hello, world. You're at the polls index.")

在urls.py中配置映射关系

from django.contrib import admin
from django.urls import path
from .view import index

urlpatterns = [
    path('admin/', admin.site.urls),
    path('index/<int:page>', index),
]

index函数中的page参数值就是uri后面的值。
在这里插入图片描述

请求与响应

HttpRequest对象

view函数中第一个参数就是HttpRequest对象

request.path_info # url字符串
request.method # 请求方法
request.GET # 字典,GET请求中参数
request.POST # 字典,POST请求中参数
request.FILES # 包含所有文件上传信息
request.COOKIES # 字典,包含所有cookie
request.session # 字典,表示cookie中session值
request.body # 请求体的内容
request.scheme # 请求协议
request.META # 请求头

HttpRespond对象

from django.http import HttpResponse


def index(request,page):
    return HttpResponse("Hello, world. You're at the polls index.")
    

HttpResponse(content=响应体,content_type=响应数据类型,status=状态码)

在这里插入图片描述

分布式路由

一个项目中,最重要的是代码分层,比如一个电商项目分为登录模块,订单模块等等,不可能同时塞在一个路由中,这时候就需要使用到分布式路由。

  1. 创建应用模块
python3 manager.py startapp 模块名称

此时就会在目录下创建一个文件夹

在这里插入图片描述

  1. 在settings.py中注册应用
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'poll'
]
  1. urls.py中写入子路由
from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path('admin/', admin.site.urls),
    path('polls/', include('polls.urls'))
]

include就代表子路由

ORM数据库操作

在models.py中编写模型类

from django.db import models

class 模型名称(models.Model):
	字段名=models.字段类型(字段选项)

迁移同步命令:
makemigrations & migrate

字段类型

  • BooleanField() 编程语言使用True或者False来表示值,数据库类型为tinyint
  • CharField() 数据库类型为varchar, 必须要有max_length参数值
  • DateField() 表示日期,数据库类型为date,有三个重要参数
    1. auto_now:每次保存对象,自动设置该时间为当前时间
    2. auto_now_add:第一次创建是保存当前时间
    3. default:设置当前时间
  • DateTimeField() 表示日期和时间,数据库类型为datetime,有三个重要参数
    1. auto_now:每次保存对象,自动设置该时间为当前时间
    2. auto_now_add:第一次创建是保存当前时间
    3. default:设置当前时间
  • FloatField() 数据库类型为double
  • DecimalField() 数据库类型decimal,有2个参数:
    1. max_digists:位数总数
    2. decimal_places:小数点后数字数量
  • EmailField() 数据库类型varchar
  • IntegerField() 数据库类型int
  • ImageField() 数据库类型varchar保存图片地址
  • TextField() 数据库类型longtext

字段选项

  • primary_key: 如果为True该字段为主键,不会自动创建id
  • null: 如果为True代表该列允许为空
  • default: 设置所在列的默认值
  • db_index: 如果为True代表为该列增加索引
  • unique: 如果为True代表为该列唯一
  • db_column: 指定列名称,如果不指定采用属性名作为列名
  • default: 设置所在列的默认值

Meta类

默认表名为类名小写,如果想要指定表名就需要Meta类

from django.db import models

class 模型名称(models.Model):
	字段名=models.字段类型(字段选项)
	class Meta:
		db_table="xxxx"

数据的增删改查

这边模拟Book对象

from django.db import models

class Book(models.Model):
	name=models.CharField()
	price=FloatField()

方法1:

Book.objects.create(name="name1",price=35.5)

方法2

book=Book()
book.name="name1"
book.price=35.5
book.save()

通过Book.objects.方法来进行数据库查询操作

方法说明
all()获取全部记录,返回QurrySet对象
get()查询符合条件的单一记录
filter()查询符合条件的多条记录
exclude()查询符合条件之外的多条记录

需求1:查询所有书本

books=Book.objects.all()

需求2:按价格顺序降序列出书本

books=Book.objects.all().order_by("-price")

字段前面加个-,说明为降序

需求3:按价格>30 and name="123"作为条件筛选出书本‘

books=Book.objects.filter(name='123',price__gt=30)

这边支持以下写法:

  • __contain 等价于like %str%
  • __startswith: 以xxx开始
  • __endswith: 以xxx开始
  • __gt 大于
  • __gte 大于等于
  • __lt 小于
  • __lte 小于等于
  • __in 在范围内books=Book.objects.filter(name__in=[‘123’,‘456’])
  • __range 在范围内books=Book.objects.filter(price__range=(25,35))

需求4:按价格>30 or name="123"作为条件筛选出书本‘

from django.db.models import Q
books=Book.objects.filter(Q(price_gt=30)|Q(name='123'))

Q对象处理复杂逻辑

在这里插入图片描述

修改单个数据

  1. 通过get获取对象
  2. 对象.属性=xxx修改值
  3. 对象.save()保存

批量修改数据
QuerySet有个update方法可以实现批量更新

books=Book.objects.all()
books.update(price=100)

删除单个数据

book=Book.objects.fliter(id=1)
book.delete()

批量删除数据

books=Book.objects.all()
books.delete()

F对象与Q对象

F对象代表数据库中某条字段信息,通常用于对数据库中字段的值在不获取情况下进行操作或者用于属性字段之间比较。
典型场景1:
更新所有书本,涨价10元
如果用一般方法需要进行遍历

books=Book.objects.all()
books.update(price=F(price)+10)

典型场景2:
查询所有market_price大于price的书本

books=Book.objects.filter(market_price_gt=F('price'))

等价于 select * from book b where b.market_price_gt>b.price

原生sql

方法1:

books=Book.objects.raw("select * from book")

方法2:


from django.db import connection
 
def my_custom_sql():
    with connection.cursor() as cursor:
        cursor.execute("SELECT foo FROM bar WHERE baz = %s", [baz])
        row = cursor.fetchone()
    return row

关系映射

一对一

创建:

from django.db import models

class Husband(models.Model):
	name=models.CharField(max_length=5)
	age=models.IntegerField()
	
class Wife(models.Model):
	name=models.CharField(max_length=5)
	age=models.IntegerField()
	husband=models.OneToOneField(Husband,on_delete=models.CASCADE)
husband=Husband.objects.create(name="小马",age=20)
wife=Wife.objects.create(name="小红",age=18,husband=husband)
# 或者
wife=Wife.objects.create(name="小红",age=18,husband_id=1)

on_delete属性

  1. models.CASCADE级联删除
  2. models.PROTECT 如果存在外键引用,则不允许删除
  3. SET_NULL 不设置外键

查询:
正向查询

wife=Wife.objects.get(id=1)
husband=wife.husband

反向查询

husband=Husband.objects.get(id=1)
wife=husband.wife

一对多

创建:

from django.db import models

class Publisher(models.Model):
	name=models.CharField(max_length=5)
	
class Book(models.Model):
	name=models.CharField(max_length=5)
	publisher=models.ForeignKey(Publisher,on_delete=models.CASCADE)
publisher=Publisher.objects.create(name="清华出版社")
book1=Book.objects.create(name="c++ prime",publisher=publisher)
book2=Book.objects.create(name="java并发编程",publisher_id=1)

查询:
正向查询(通过book查找publisher)

book=Book.objects.get(id=1)
publisher=book.publisher

反向查询(通过publisher查找book)

publisher=Publisher.objects.get(id=1)
books=publisher.book_set.all()

多对多

创建:

from django.db import models

class Author(models.Model):
	name=models.CharField(max_length=5)
	
class Book(models.Model):
	name=models.CharField(max_length=5)
	authors=models.ManyToMayFiled(Author,on_delete=models.CASCADE)

此时会自动创建第三张表做他们之间的关系映射

author1=Author.objects.create(name="tdx")
author2=Author.objects.create(name="mytdx")
book1=author1.book_set.create(name="java并发编程")
author2.book_set.add(book1)

等价于

book=Book.objects.create(name="java并发编程")
Book.authors.create(name="mytdx")
Book.authors.create(name="tdx")

查询:
正向查询(通过book查询author):

book=Book.objects.get(id=1)
authors=book.authors.all()
authors=book.authors.filter(name="tdx")

反向查询(通过author查询book):

books=Author.book_set.all()
books=Author.book_set.filter()
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-04-22 18:32:27  更:2022-04-22 18:35:02 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 18:07:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码