首页 > 其他分享 >Django模型及Admin

Django模型及Admin

时间:2023-10-08 14:34:21浏览次数:33  
标签:Web Admin 模型 py request django Django hello

Django简介

什么是Django

Django是一个开源的Python Web框架,由Django Software Foundation开发和维护。Django的目标是让Web开发更加快速、简单和高效,提供了许多内置的功能和库,如ORM、模板引擎、表单处理、认证、管理后台等。

image

1.2 Django的优点及特点

  • 高效快速:Django提供了许多内置的功能和库,可以快速构建复杂的Web应用程序。
  • 安全稳定:Django提供了许多安全性功能,如CSRF保护、XSS保护、SQL注入保护等,可以保证Web应用程序的安全性和稳定性。
  • 可扩展性:Django提供了许多可扩展的功能和库,如第三方插件、中间件、信号等,可以根据需要扩展和定制Web应用程序。
  • 易于维护:Django提供了许多内置的功能和库,可以减少代码量和重复工作,使得Web应用程序易于维护和升级。
  • 社区活跃:Django拥有庞大的社区和生态系统,提供了许多第三方插件和库,可以快速解决各种问题和需求。

Django的应用场景

  • 大型Web应用程序:Django适用于大型Web应用程序的开发,可以快速构建复杂的Web应用程序。
  • CMS系统:Django提供了许多内置的功能和库,如ORM、模板引擎、管理后台等,适用于CMS系统的开发。
  • 社交网络:Django提供了许多内置的功能和库,如认证、权限、信号等,适用于社交网络的开发。
  • 电子商务:Django提供了许多内置的功能和库,如ORM、表单处理、支付等,适用于电子商务的开发。

Django、Flask和FastAPI对比

  • Django:Django是一个全功能的Web框架,提供了许多内置的功能和库,如ORM、模板引擎、表单处理、认证、管理后台等。Django适用于大型Web应用程序的开发,可以快速构建复杂的Web应用程序。Django的缺点是相对于其他框架来说比较重量级,需要一定的学习成本。
  • Flask:Flask是一个轻量级的Web框架,提供了基本的功能和库,如路由、模板引擎、请求和响应处理等。Flask适用于小型Web应用程序的开发,可以快速构建简单的Web应用程序。Flask的优点是灵活性高,可以根据需要选择和集成各种库和插件。Flask的缺点是需要手动安装和配置各种库和插件,需要一定的技术水平。
  • FastAPI:FastAPI是一个异步高性能Web框架,提供了高性能和易用性的特点,支持异步编程和类型注解。FastAPI适用于需要高性能和高并发的Web应用程序的开发,可以快速构建高效的Web应用程序。FastAPI的优点是性能高、易用性好、文档丰富,支持异步编程和类型注解。FastAPI的缺点是相对于其他框架来说还比较新,生态系统和社区还不够完善。

Django安装和配置

Django安装、创建项目及App

安装Django

pip install django

创建项目

django-admin startproject myproject

创建App

cd myproject
python3 manage.py createapp myapp

注册App:修改myproject/settings.py, 在INSTALLED_APPS中添加myapp

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'myapp',
]

启动开发服务器

python3 manage.py runserver

访问 http://127.0.0.1:8000/

image

Django项目结构介绍

myproject /
├── manage.py            # 命令行管理工具
├── myapp /               # 应用目录
│   ├── __init__.py
│   ├── admin.py        # 应用管理后台配置
│   ├── apps.py          # 应用配置
│   ├── migrations /  # 应用数据库迁移脚本目录
│   ├── models.py      # 应用数据库模型配置
│   ├── tests.py          # 应用测试脚本
│   └── views.py         # 应用接口编写
└── myproject /         # 项目目录
    ├── __init__.py
    ├── asgi.py              # 异步ASGI部署配置
    ├── settings.py        # 项目设置
    ├── urls.py               # 项目总接口路由
    └── wsgi.py             # WSGI部署配置

此外根据实际需要还可以在myapp中添加

  • url.py  # 应用子接口路由
  • static /   # 应用静态文件目录
  • templates /  # 应用模板目录
  • templatetags /  # 应用自定义模板标签目录

Django配置文件介绍

  • DEBUG:用于开启或关闭调试模式,调试模式下会显示详细的错误信息和调试信息。
  • ALLOWED_HOSTS:用于设置允许访问Django应用程序的主机名或IP地址。
  • DATABASES:用于配置数据库连接信息,包括数据库类型、主机名、端口号、用户密码等。
  • INSTALLED_APPS:用于配置Django应用程序中安装的应用程序列表。
  • MIDDLEWARE:用于配置Django应用程序中使用的中间件列表。
  • STATIC_URL:用于配置静态文件的URL前缀。
  • TEMPLATES:用于配置Django应用程序中使用的模板引擎和模板选项。
  • TIME_ZONE:用于配置时区信息,如Asia/Shanghai
  • LANGUAGE_CODE:用于配置语言代码,如zh-hans
  • STATICFILES_DIRS:用于配置静态文件的目录列表(默认无该项),如 STATICFILES_DIRS=[BASEDIR / 'static']

Django使用MySQL数据库

安装MySQL客户端
pip install mysqlclient
如果安装不上,可以换成pip install pymysql, 并在settings.py同级目录的__init__.py中添加

import pymysql
pymysql.install_as_MySQLdb()

•数据库配置
在settings.py中修改DATABASES配置

DATABASES = {
    'default': {
         'ENGINE': 'django.db.backends.mysql',
         'NAME': 'myproject',  # 需要手动创建库
         'USER': 'root',
         'PASSWORD': 'passw0rd',
         'HOST': 'localhost',
         'PORT': '3306'
    }
}

Django启用静态服务显示图片

安装pillow

pip install pillow

媒体配置,在settings.py中修改添加media相关配置

MEDIA_URL = "/media/"
MEDIA_ROOT = BASE_DIR / "media"

启用静态服务URL,在urls.py中修改添加media相关配置

from django.conf.urls.static import static

if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

Django编写接口

•编写视图函数
•编辑app/views.py,定义接口(视图)

from django.http import JsonResponse

def hello(request):
    data = { 'message': 'Hello, World!'}
    return JsonResponse(data)

注册接口路由
编辑myproject/urls.py,导入接口并关联接口地址

from django.contrib import admin
from django.urls import path
from myapp import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('hello/', views.hello, name='hello'),
]

浏览器访问 http://127.0.0.1:8000/hello/  查看效果。

获取接口参数

获取GET请求Query参数

def hello(request):
    msg = request.GET.get(‘msg’)
    # ...

获取POST请求JSON数据

def hello(request):
    data = json.loads(request.body)
    msg = data.get(‘msg’)
    # ...

获取POST请求FORM参数

from django.views.decorators.csrf import csrf_exempt

@csrf_exempt  # 需要关闭csrf token验证
def hello(request):
    msg = request.POST.get(‘msg’)
    # ...

获取接口路径参数
url配置中添加参数

# myproject/url.py
...
urlpatterns = [
    path('hello/<msg>', views.hello, name='hello'),
]

接口函数中添加对应参数

# myapp/views.py
def hello(request, msg):
    # ...

返回不同的响应

返回普通HTTP响应

from django.http import HttpResponse

def hello(request):
    html = '<h1>Hello, world!</h1>'
    return HttpResponse(html) #支持指定状态码及内容类型

返回JSON响应

from django.http import JsonResponse

def hello(request):
    data = {'message': 'Hello, World!'}
    return JsonResponse(data)

重定向到其他接口

from django.http import HttpResponseRedirect

def hello(request):
    return HttpResponseRedirect('/hi')

渲染并返回HTML模板

{#myapp/templates/hello.html#}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Hello</title>
</head>
<body>
    <h1>{{ message }}</h1>
</body>
</html>
# myapp/views.py
from django.shortcuts import render

def hello(request):
    data = {'message': 'Hello, World!'}
    return render(request, 'hello.html', data)

返回文件

import os
from django.http import FileResponse
from django.conf import settings

def hello(request):
    file_path = os.path.join(settings.MEDIA_ROOT, ‘my_file.txt’)
    return FileResponse(open(file_path, ‘rb’), as_attachment=True)   # 不加as_attachment=True则返回文件原始内容

返回错误常见HTTP错误

from django.http import HttpResponse, HttpResponseBadRequest, HttpResponseNotFound, HttpResponseServerError

def hello(request):
    # return HttpResponse('400 Bad request', status=400)
    # return HttpResponseBadRequest('400 Bad request')
    # return HttpResponseBadRequest('404 Not found')
    return HttpResponseBadRequest('500 Internal Server Error')

Django路由配置

在Django中,路由配置用于将URL映射到相应的视图函数或类。通过路由配置,可以定义应用程序中的URL模式,以便Django能够正确地将请求路由到相应的处理程序。

  • path
  • re_path
  • include
    路由名称及反向查找
  • reverse()
  • redirect()

标签:Web,Admin,模型,py,request,django,Django,hello
From: https://www.cnblogs.com/superhin/p/17748977.html

相关文章

  • Mac本地部署大模型体验AIGC能力
    介绍随着ChatGPT的横空出世,国内互联网大厂、创业公司纷纷加了AIGC赛道,不断推出各种大模型,而这些大模型由于规模庞大、结构复杂,往往包含了数十亿至数千亿的参数。这些模型在训练阶段,一般需要使用高效能的GPU集群训练数十天时间,在推理阶段,一般也需要高效能的GPU集群才能支撑一定量......
  • transformer模型训练、推理过程分析
    复杂度分析推理过程图示DoubleQLORA示意图......
  • CUDA C编程权威指南:2.1-CUDA编程模型
      本文主要通过例子介绍了CUDA异构编程模型,需要说明的是Grid、Block和Thread都是逻辑结构,不是物理结构。实现例子代码参考文献[2],只需要把相应章节对应的CMakeLists.txt文件拷贝到CMake项目根目录下面即可运行。1.Grid、Block和Thread间的关系  GPU中最重要的2种内存是全局......
  • fastadmin
    fastadmin列表获取选中项varids=Table.api.selectedids(table); 获取table页面返回数据//初始化表格table.bootstrapTable({url:$.fn.bootstrapTable.defaults.extend.index_url,pk:'id',sortName:'id',fixedColumns:true,fixedRightNumbe......
  • LVS的NAT、DR模型实现
    1、LVS-NAT模式实现环境:共四台主机一台:internetclient:192.168.10.6/24 GW:无仅主机一台:lvs eth1仅主机192.168.10.100/16eth0NAT10.0.0.8/24两台RS:RS1:10.0.0.7/24GW:10.0.0.8NATRS2:10.0.0.17/24GW:10.0.0.8NAT#client网卡配置:[root@internet~]#......
  • EF Core模型设置主键自增
    提问如何EFCore模型设置主键自增回答Microsoft.AspNetCore.Identity.EntityFrameworkCore[Key][DatabaseGenerated(DatabaseGeneratedOption.Identity)]publicintID{get;set;}参考https://www.quarkbook.com/?p=561https://learn.microsoft.com/zh-cn/ef/core/mo......
  • TextRCNN、TextCNN、RNN…你都掌握了吗?一文总结文本分类必备经典模型(一)
     本专栏将逐一盘点自然语言处理、计算机视觉等领域下的常见任务,并对在这些任务上取得过SOTA的经典模型逐一详解。前往SOTA!模型资源站(sota.jiqizhixin.com)即可获取本文中包含的模型实现代码、预训练模型及API等资源。本文将分3期进行连载,共介绍 20 个在文本分类任务上......
  • TextCNN、DCNN、AttentionXML…你都掌握了吗?一文总结文本分类必备经典模型(二)
    https://mp.weixin.qq.com/s/f5SkoWD4BY_HDWfPi5R5ng 本专栏将逐一盘点自然语言处理、计算机视觉等领域下的常见任务,并对在这些任务上取得过SOTA的经典模型逐一详解。前往SOTA!模型资源站(sota.jiqizhixin.com)即可获取本文中包含的模型实现代码、预训练模型及API等资源。本......
  • 三维模型3DTile格式轻量化的纹理压缩和质量关系分析
    三维模型3DTile格式轻量化的纹理压缩和质量关系分析 在三维模型的3DTile格式轻量化处理中,纹理压缩是一个重要环节。但是,纹理压缩和模型质量之间存在明显的关系需要权衡。以下是纹理压缩和模型质量关系的详细分析:1、压缩率与纹理质量:一般来说,高度压缩的纹理可以大大减小文件大......
  • Langchain-Chatchat项目:2.1-通过GPT2模型来检索NebulaGraph
      在官方例子中给出了通过chain=NebulaGraphQAChain.from_llm(ChatOpenAI(temperature=0),graph=graph,verbose=True)来检索NebulaGraph图数据库。本文介绍了通过GPT2替换ChatOpenAI的思路和实现,暂时不考虑效果。之所以没用ChatGLM2是因为加载模型太慢,调试不方便,不过将GPT2......