Django 3 学习笔记

django-import-export:Django数据导入导出库 Django框架以其优雅的编码风格和高度的可定制性成为Python开发者首选的Web开发平台。在处理数据导入导出的场景时,django-import-export库的出现,提供了一种无缝集成到Django项目中的高效方案。通过该库,开发者可以在Django的管理界面中,利用内置的导出导入功能来处理数据的CRUD操作,从而简化了数据批量处理的流程。 阅读详情

点击上方“编程派”,选择设为“设为星标”

优质文章,第一时间送达!

作者:国光

出处:https://www.sqlsec.com/

Django是一个文档很全的框架,学习的时候老是遇到一些坑,这里就顺便记录一下,以便后面使用,同时也希望本文可以帮助到其他的朋友。

开发环境

操作系统:macOS Cataline 10.15.3

Python:pyenv 安装的 pypy3.6-7.3.0 (PyPy解释器平均比我们平时使用的CPython快4.4倍)

Django:Django 3.0.3

相关依赖

MySQL

macOS下Django3在连接MySQL会出一些问题,解决如下:

# 确保 pip 是最新版本
$ pip install --upgrade pip

# 临时在当前的shell环境中配置一个 openssl 变量
export LDFLAGS="-L/usr/local/opt/openssl/lib $LDFLAGS"
export CPPFLAGS="-I/usr/local/opt/openssl/include $CPPFLAGS"

$ pip install mysqlclient

pillow

在models.py中含有ImageField图片类型的时候,如果pillow没有安装好的话 会报错:

image = models.ImageField(upload_to='avatar/%Y/%m', verbose_name='头像', max_length=100)

解决方法是macOS下安装配置好zlib即可:

# 安装 zlib
$ brew install zlib

# 链接 zlib 会提示
$ brew link zlib --force

Warning: Refusing to link macOS-provided software: zlib
For compilers to find zlib you may need to set:
  export LDFLAGS="-L/usr/local/opt/zlib/lib"
  export CPPFLAGS="-I/usr/local/opt/zlib/include"

根据上述提示,进行如下操作:

# 临时在当前的shell环境中配置一个 zlib 变量
export LDFLAGS="-L/usr/local/opt/zlib/lib"
export CPPFLAGS="-I/usr/local/opt/zlib/include"

$ pip install pillow

目录配置

templates

模板目录 Python 命令行创建的 Django 项目默认是没有自动生成这个目录的,首先项目目录下新建templates文件夹,然后配置一下settings:

settings.py

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')], # 将 templates 设置为模板目录
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

static

该目录存放一些css js 之类的静态文件,也得手动到 settings.py 添加配置一下:

settings.py

STATIC_URL = '/static/'
STATICFILES_DIRS = [(os.path.join(BASE_DIR, 'static'))]

apps

当项目下的app太多的时候,项目的目录结构看上去就会比较混乱,一个解决办法就是将项目下的所有app都放到一个apps的文件夹中,首先项目下新建apps文件夹,接着手动到 settings.py 添加配置一下:

settings.py

import os
import sys

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, os.path.join(BASE_DIR, 'apps')) # 将 apps 文件夹添加到 BASE_DIR中

media

media文件夹用来存放用户上传的图片资料等,首先配置下settings.py

settings.py

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
                'django.template.context_processors.media', # 添加 media 模板
            ],
        },
    },
]

接着配置 media 根目录变量:

settings.py

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

配置好之后在 urls.py 里面配置下 media 的路由规则:

urls.py

from django.urls import path, re_path
from django.views.static import serve
from project.settings import MEDIA_ROOT

urlpatterns = [
    path('admin/', admin.site.urls),
      # 配置 media 的处理
    re_path('media/(?P<path>.*)', serve, {'document_root': MEDIA_ROOT}, name='org_list'),
]

下面看一下 简单的 引用 meida 中图片文件的实例:

models.py

class CourseOrg(models.Model):
    ...
    image = models.ImageField(upload_to='org/%Y/%m', verbose_name='logo', max_length=100)
    ...

前端调用显示 media 里的文件

<img width="200" height="120" class="scrollLoading" data-url="{{ MEDIA_URL }}{{ course_org.image }}"/>

实用插件

验证码

项目地址:https://github.com/mbi/django-simple-captcha

$ pip install django-simple-captcha

安装好之后,在settings.py引用即可:

settings.py

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'captcha',  # 引用验证码插件
]

引用完成后,更新下数据库的信息,因为这个验证码信息是存放在本地数据库中的:

$ python manage.py makemigrations
$ python manage.py migrate

数据库更新成功后可以在数据库下看到 captcha_captchastore 表名,接着得配置下验证码的url路由规则:

urls.py

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

Form表单中定义如下:

forms.py

from django import forms
from captcha.fields import CaptchaField

class RegisterForm(forms.Form):
    email = forms.EmailField(required=True)
    password = forms.CharField(required=True, min_length=5)
    captcha = CaptchaField(error_messages={'invalid': '验证码错误'})

Views里面实例化这个表单类:

views.py

class RegisterView(View):
    def get(self, request):
        register_form = RegisterForm()
        return render(request, 'register.html', {
            'register_form': register_form
        })

views.py里面 返回了register_form到前端,接着前端可以直接调用 验证码:

<div class="form-group marb8 captcha1">
<label>验证码</label>
{{ register_form.captcha }}
</div>

分页

项目地址:https://github.com/jamespacileo/django-pure-pagination

$ pip install django-pure-pagination

安装好之后,在settings.py引用即可:

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

views里面的基本用法:

views.py

from pure_pagination import Paginator, EmptyPage, PageNotAnInteger

class OrgView(View):
    """
    课程机构列表功能显示
    """
    def get(self, request):
        # 课程机构
        all_orgs = CourseOrg.objects.all()

        # 官方提倡的写法
        try:
            page = request.GET.get('page', 1)
        except PageNotAnInteger:
            page = 1

        # 将数据库中 查询的 all_orgs 分页 每页显示5个
        p = Paginator(all_orgs, 5, request=request)
        orgs = p.page(page)
        return render(request, 'org-list.html', {
            'all_orgs': orgs,  # 分页的结果传给前端
        })

前端分页的引用:

<div class="pageturn">
<ul class="pagelist">
<!-- 判断是是否有上一页 -->
  {% if all_orgs.has_previous %}
  <li class="long"><a href="?{{ all_orgs.previous_page_number.querystring }}">上一页</a></li>
  {% endif %}

<!-- 显示中间页数 和 高亮 当前页 -->
  {% for page in all_orgs.pages %}
  {% if page %}
  {% ifequal page all_orgs.number %}
  <li class="active"><a href="?{{ page.querystring }}" class="page">{{ page }}</a></li>
  {% else %}
  <li><a href="?{{ page.querystring }}" class="page">{{ page }}</a></li>
  {% endifequal %}
  {% else %}
  <li class="none"><a href="">...</a> </li>
  {% endif %}
  {% endfor %}

<!-- 判断是是否有下一页 -->
  {% if all_orgs.has_next %}
  <li class="long"><a href="?{{ all_orgs.next_page_number.querystring }}">下一页</a></li>
  {% endif %}
</ul>
</div>

最后的分页效果如下:

Django分页效果

导入导出

项目地址:https://github.com/django-import-export/django-import-export

$ pip install django-import-export

安装好之后,在settings.py引用即可:

settings.py

INSTALLED_APPS = [
    'import_export',  # 引用导入导出插件
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

接着可以直接在Django Admin后台引用:

admin.py

from import_export.admin import ImportExportActionModelAdmin

@admin.register(CourseOrg)
class CourseOrgAdmin(ImportExportActionModelAdmin):
    list_display = ['name', 'image_data', 'address']
    search_fields = ['name', 'city', 'address', 'desc']
    list_filter = ['city', 'add_time']

最后配合Simple UI的效果如下:

Simple UI 导入导出

Admin 配置

修改后台名称

在urls.py 里面添加 如下即可:

Python

admin.site.site_header = '后台管理'
admin.site.site_title = 'Django 后台管理'

核心原理就是 在引用 这个模块的文件里面添加配置即可生效:

from django.contrib import admin

最后效果如下:

Django自定义后台名称

图片显示

Django Admin 的列表中图片只显示 url 地址,却不能直接显示出来:

Django Admin图片不显示

解决方法就是重写Django Admin 后台图片的显示。

models.py

from django.utils.html import format_html

class CourseOrg(models.Model):
    image = models.ImageField(upload_to='org/%Y/%m', verbose_name='logo', max_length=100)

    # 定义 image_data 将 url 手动 通过 img 表情显示出来
    def image_data(self):
        return format_html(
            '<img src="{}" width="200px" height="90px"/>',
            self.image.url,
        )
        # 设置标题
    image_data.short_description = '图片'  

admin.py

from django.contrib import admin

@admin.register(CourseOrg)
class CourseOrgAdmin(admin.ModelAdmin):
      # 显示里面 传入 我们自定义的 image_data
    list_display = ['name', 'image_data', 'address']
    search_fields = ['name', 'city', 'address', 'desc']
    list_filter = ['city', 'add_time']

    # 设置该列不可编辑
    readonly_fields = ('image_data',)

最后显示效果如下:

Django Admin 图片显示
回复下方「关键词」,获取优质资源

回复关键词「 pybook03」,立即获取主页君与小伙伴一起翻译的《Think Python 2e》电子版
回复关键词「入门资料」,立即获取主页君整理的 10 本 Python 入门书的电子版
回复关键词「m」,立即获取Python精选优质文章合集
回复关键词「book 数字」,将数字替换成 0 及以上数字,有惊喜好礼哦~
题图:pexels,CC0 授权。

好文章,我在看
基于TI MSPM0的PS2双轴按键摇杆模块ADC+GPIO驱动移植实战 本文详细介绍了在TI MSPM0微控制器上驱动PS2双轴按键摇杆模块的完整实战流程。通过SysConfig图形化工具配置ADC与GPIO引脚,并编写了包含ADC采样、按键检测及数据处理的驱动代码,实现了对摇杆X/Y轴模拟量及按键数字量的稳定读取,为嵌入式控制项目提供了可直接移植的解决方案。 阅读详情

相关推荐

C语言头文件完全解析(连“#”我都给你讲明白)

C语言头文件完全解析 引言 本文将尽量详细的介绍c语言的头文件所包含的知识,如有错误,还望指正。 萌新们肯定疑惑为什么每次打代码都要写一个所谓的头文件(如:#include<stdio.h>),这里先简单让大家有个了解,你所用的 printf("%d",a)就是这个 stdio里的东西,如果没有这个头文件,编译器都不知道 printf是个什么东东。所以头文件就是一个准备好的大仓库,你可...

CRAZY_eyes的博客 7万+

django admin创建的时候的admin.py 中书写的案例

@admin.register(Employe) class EmployeAdmin(ImportExportActionModelAdmin): resource_class = ProxyResource list_display = ('id', 'name', 'gender', 'phone', 'birthday', 'department', 'enable', '...

turetony的专栏 485

海思Hi3061M MCU:为高速吹风筒市场注入智能动力

此外,海思还提供了丰富的软件开发工具和生态环境组件,帮助开发者快速实现复杂功能。高速吹风筒因其高效的风力和快速的干燥效果,近年来在市场上越来越受欢迎。然而,传统的高速吹风筒在性能、噪音和使用寿命等方面仍有改进的空间。凭借其高性能、低功耗、低噪声和易用的开发工具,为高速吹风筒市场带来了全新的解决方案。这不仅提高了用户的使用体验,还延长了电机的使用寿命。这不仅减少了电机的电磁噪声,还提高了电机的运行效率。还支持风机顺逆风启动适配多种电阻范围的电机,进一步提高了吹风筒的适用性和灵活性。

2401_83448585的博客 2016

django学习

1、创建project python django-admin.py startproject DjangoDemo如果这个不可以的话,执行python C:\Python35\Scripts\django-admin.py startproject DjangoDemo 将python的scripts目录加上执行创建project任务 2、切换到project任务的目录中,执行python ma...

qq_22994783的博客 225

一文说清STM32CubeMX中文汉化全流程(图解说明)

详细讲解STM32CubeMX中文汉化的完整流程,通过图文并茂的方式手把手教学,解决界面英文带来的使用障碍,让开发更高效。掌握stm32cubemx中文汉化技巧,提升嵌入式开发体验。

weixin_42499004的博客 6287

Qt/C++ 音视频开发 - FFmpeg 安卓版

通过将 FFmpeg 集成到 Qt/C++ 项目中,我们可以实现强大且灵活的音视频处理功能。本文介绍了在安卓平台上使用 FFmpeg 的基本步骤,包括初始化、解码、处理和编码等。实际应用代码示例展示了如何在安卓设备上播放视频。

走向CTO的路上... 1193

Django点滴(2)xadmin+django-import-export导入导出的实现

Django-xadmin+django-import-export导入导出的实现Django点滴系列是本人Django使用的一个记录,主要用于踩坑填坑,如果能帮到你,就是我荣幸! 书接上回, 上一篇博客 Django点滴(1)xadmin+rule对象级权限的实现记录了xadmin对象级权限相关应用,本篇将目光投向xadmin的导入导出功能。 1. 需求vs现状1.1 需求要求做一个ERP后台

zcyuefan的博客 1万+

Agentic-Desktop-Pet:构建本地智能桌面助手的架构与实践

智能体(Agent)作为人工智能领域的重要概念,是指能够感知环境、自主决策并执行任务以实现目标的软件实体。其核心原理在于结合感知、决策与执行模块,通过大语言模型(LLM)等推理引擎处理信息并驱动行动。这种架构的技术价值在于将AI的认知能力与具体的操作系统环境深度融合,从而创造出能主动理解用户上下文、提供个性化服务的智能伙伴。在应用场景上,智能体技术正从云端对话机器人向本地化、场景化的桌面助手演进,旨在解决传统自动化工具缺乏智能、而纯聊天机器人脱离操作环境的问题。本文探讨的Agentic-Desktop-Pe

weixin_27210125的博客 623

Django学习笔记3

创建网页: 学习笔记主页使用Django创建网页的过程通常分为三个阶段:定义URL、编写视图和编写模板打开learning_log中的文件urls.py 能够将learning_logs的URL同项目中其他URL区分开from django.conf.urls import include, url from django.contrib import admin urlpatterns = [...

you are sherlocked by me! 800

【华为OD机试真题E卷】514、学生方阵 | 机试真题+思路参考+代码分析(E卷复用)(C++、Java、Py)

【华为OD机试真题E卷】514、学生方阵 | 机试真题+思路参考+代码分析(E卷复用)(C++、Java、Py) 题目描述 学校组织活动,将学生排成一个矩形方阵 请在矩形方阵中找到最大的位置相连的男生数量 这个相连位置在一个直线上,方向可以是水平的,垂直的,成对角线的或者呈反对角线的 注:学生个数不会超过10000

KJ.JK 2493

VMware ESXi 直通GPU

虚拟机需要独享GPU资源,那么就需要用到DirectPath I/O (直通),ESXi hypervisor 把 GPU 设备直接映射成虚机中的 GPU 设备,供应用使用。注意,内存注意一定要勾选预留,否则开机后报错如下:无法打开虚拟机 win10 的电源。1.ESXi主机,管理,硬件,PCI设备,勾选GPU卡,切换直通,会提示要求重启主机,重启主机之后,该GPU设备直通一栏显示为“活动”。先确认虚拟机是否EFI引导:编辑虚拟机 - 虚拟机选项 - 引导选项 - 固件 - EFI。

liwension的博客 6295

Django之“学习笔记”网站开发3

引言 前面我们讲述了基本的Web应用程序开发流程,现在我们就来谈谈如何设置应用程序的样式并对其进行部署。 当前咱们这个”学习笔记“项目功能已齐备,但未设置样式,也只是在本地计算机上运行。在这次分享中我们将以简单而专业的方式设置这个项目的样式,再将其部署到一台服务器上,让所有人都能建立账户。 为了设置样式,我们将使用Bootstrap库,这是一组工具,用于为Web应用程序设置样式,使其在现代设

分享人工智能学习心得与实践经验,探讨应用场景,见证变革与进步 1865

2026 蓝牙技术趋势展望:信道探测、Auracast、高吞吐 HID 与 AI 融合引领行业变革

蓝牙技术2026年展望:信道探测、Auracast广播音频和AI融合将引领创新。蓝牙信道探测技术将实现亚米级精确定位,在工业资产追踪和汽车数字钥匙领域大显身手。Auracast广播音频将持续拓展公共场所应用,提升音频包容性体验。高数据吞吐量和超低延迟功能将支持AR/VR等新兴场景。AI与蓝牙的深度融合将推动可穿戴设备智能化发展,实现实时健康监测和个性化音频服务。蓝牙技术凭借其多功能性和创新力,正成为连接万物的关键技术,持续推动行业变革和生活品质提升。

专业开发者的博客,一个从事Android WiFi和蓝牙的工程师 113

(django入门学习笔记3)python中基于django库的后端开发(从零开始搭建一个项目)(作者企业开发历程)

从零开始学习django框架,需要具备一定的python能力,笔者企业开发历程,手把手教你一步一步完成企业的需求!

qq_41955621的博客 2931

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

django学习笔记3

protocol::协议 hostname:主机 port:端口号 path:路由地址,由零个或多个"隔开的字符串, 一般用来表示主机上的一个目录或者文件地址 query:查询,可选,用于给动态网页传递参数,可以 有多个参数,用”&”隔开,每个参数的名和值用”=” 符号隔开。STATIC_URL = '/static/'就是钥匙,只有加了/static/才能访问该文件夹,而views.py访问templates/home.html,不需要加/templates/#内部传递一个字符串参数,返回给刘览器。

m0_68768341的博客 107

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Django学习笔记3 Django模型

Django 模型定义及使用blog示例 Django的数据库模型 Django Field类型 Django 主键和唯一性

baidu_35401736的博客 532

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

基于Django的Python应用——学习笔记

打开learning_logs/models.py建立两个模型# """用户学习的主题"""# """返回模型的字符串表示""""""学到的有关某个主题的具体知识""""""返回模型的字符串表示"""

weixin_55731208的博客 2845

Django-3-创建学习笔记主页

1、URL模式(描述了URL如何设计,使Django将浏览器请求与网站URL匹配) 编辑/learning_log/learning_log/urls.py from django.contrib import admin from django.urls import path from django.conf.urls import include, url urlpatterns =...

m0_37589741的博客 379

Django入门——3、创建网页:学习笔记主页

(1)映射URL 打开文件夹learning_blog中的urls.py,并进行修改。 urls.py:(修改后:) from django.conf.urls import include,url from django.contrib import admin urlpatterns = [ url(r'^admin/', include(admin.site.urls)), url(r'',include('learning_blogs.urls',namespace='learning_blo

卉卉灰灰的博客 269

django学习笔记(3)—— Django ORM

文章目录3. Django ORM3.1 Django ORM概述3.2 Django ORM 的用法3.2.1 Django ORM字段3.2.2 Django ORM 基本数据操作3.3 数据表操作案例3.3.1 准备工作3.3.2 建立路由与视图函数的对应关系3.3.3 编写视图函数导包数据列表增添数据删除数据编辑数据3.4 Django ORM 跨表操作3.4.1 与外键有关的跨表操作Foreign Key字段外键跨表关联操作外键跨表操作 样例外键跨表查询字段3.4.2 与多对多键有关的跨表操作Ma

zyw2002的博客 866

Django学习笔记-3

编写URL规则URL编写规则带变量的URL设置name URL编写规则 URL(Uniform Resource Locator,统一资源定位符)是互联网上标准资源地址。用于指出文件的路径位置。Django中,URL也成为URLconf。 每个App中设置独立的静态资源和模板文件夹并添加一个.py文件,命名为urls.py。 在App的urls.py中写入对应URL,项目根目录urls.py...

qq_21153997的博客 448

Django学习笔记第3记

一、模型Models 1、MySQL 数据库perf.sasm3.net/database/ 首先学习一下MySQL的常用命令和数据类型、格式 登录: $ mysql -u 用户名 -p Enter password:密码 创建数据库: mysql->create database 数据库名 选择需要操作的数据库: mysql->use 数据库名; 等等,可以查看http:/

灰狗的博客 253

Django学习笔记-Django概述与Python3语法

Django是后起之秀,近些年越来越流行,Youtube(月活20亿+)、Instagram(月活10亿+)等公司采用了Django框架。可以作为Web、App、小程序、AcWing云端App(AC APP)等各种项目的后端。开发效率高,生态完善,有官方社区长期支持。运行效率高(常见误区:Python运行效率低,所以Python写的应用运行效率低)。项目运行效率瓶颈有很多,比如:数据库查询、网络带宽/延迟、硬盘读写速度等,这些与框架关系不大。

一只快乐的小蒟蒻~ 1013
上一篇: Python 3.9 很快就要来了!
下一篇: 这一招将 Numpy 加速 700 倍!!!
codingpy
博客等级 码龄11年 1873粉丝 104原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值