python django

数据库 模型

创建数据库模型

  1. 在polls/models.py中设计模型
  2. 安装应用到项目,在project/settings.py    INSTALLED_APPS中添加polls.apps.PollsConfig
  3. python manage.py makemigrations    生成迁移文件,不改变数据库
  4. python manage.py migrate        更新数据库

进入交互模式

python manage.py shell

设计模型

如果你想自己指定主键, 在你想要设置为主键的字段上设置参数 primary_key=True。如果 Django 看到你显式地设置了 Field.primary_key,将不会自动在表(模型)中添加 id 列。

from django.db import models

class DetectRecord(models.Model):
    uuid = models.UUIDField()
    time = models.DateTimeField()
    date = models.DateField()
    money = models.DecimalField()
    float = models.FloatField()
    name = models.CharField(max_length=64)
    pic = models.BinaryField()
    pic_type = models.CharField(max_length=32)
    pic_sha256 = models.CharField(max_length=64)
    req_id = models.AutoField(primary_key=True)   # 一个 IntegerField,根据可用的 ID 自动递增
    res = models.IntegerField()
    acc = models.IntegerField()

ORM 

from detect.models import DetectRecord as DR
from django.shortcuts import get_object_or_404

DR.objects.raw("select * from table")                       # sql
 
DR.objects.all()                                            # lazy, 查
DR.objects.filter(f1=f1, f2=f2)                             # lazy, 查
DR.objects.filter(f1=f1, f2=f2).update(f1=g1, f2=g2)        # 改
DR.objects.filter(f1=f1, f2=f2).delete()                    # 删

# 查, 返回单对象, 不存在会抛出DR.DoesNotExist, 存在多个会抛出DR.MultipleObjectsReturned
DR.objects.filter(f1=f1, f2=f2).get()

# 会抛出Http404或DR.MultipleObjectsReturned
get_object_or_404(DR, f1=f1, f2=f2)

DR.objects.all()[:10]                                        # 查
DR.objects.all().order_by("-rating")                         # 查

ndr = DR(...)                                                # 增
ndr.save()

HTTP

from django.http import HttpResponse, JsonResponse

return HttpResponse(content=b'', content_type=None, status=200, reason=None, charset=None, headers=None)

return JsonResponse(data)        # JsonResponse是HttpResponse的子类
request是HttpRequest的实例
request.GET是QueryDict的实例
request.FILES是类似字典的对象

def view(request):
    if request.method == "GET":
        p1 = request.GET.get("p1")                # 只返回1个
        p1list = request.GET.getlist("p1")
        

    elif request.method == "POST":
        files = request.FILES.getlist("pic")

URL

from django.urls import path, include

from . import views

urlpatterns = [
    path("", include("visual.urls")),
    path("detect/", views.detect, name="detect"),
    path("home/log/getimg/<uuid:uuid>/", views.get_img, name="get_img"),    # <type:name>
]

def get_img(request, uuid):
    pass

WebSocket

一个连接初始化一个Consumer

from channels.generic.websocket import AsyncWebsocketConsumer


class MyConsumer(AsyncWebsocketConsumer):
    def __init__(self):
        super().__init__()
        pass

    async def connect(self):
        await self.channel_layer.group_add("broadcast", self.channel_name)    # 加入组
        await self.accept()                                                   # 完成连接

    # 清理工作
    async def disconnect(self, close_code):
        await self.channel_layer.group_discard("broadcast", self.channel_name) # 退出组

    async def receive(self, text_data):
        await self.send("hello world")
        await self.close()

ASGI

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "contest.settings")
django.setup()

from visual import consumers                        

application = ProtocolTypeRouter({
    "http": get_asgi_application(),
    "websocket": AuthMiddlewareStack(
        URLRouter([
            path('ws/visual/', consumers.VConsumer.as_asgi()),
        ])
    )
})
uvicorn contest.asgi:application --reload

中间件

channels

Channels is a project that takes Django and extends its abilities beyond HTTP - to handle WebSockets, chat protocols, IoT protocols, and more. It’s built on a Python specification called ASGI.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值