【实用向】Django 框架入门

声明

这是一篇实用向的Django框架教程博客,适用于想要快速入门的开发者,有前后端开发以及语言基础,想要学习语法或者特性。,包括一些基础的使用,想要学习请结合文章初识 Django并按照我的顺序一步步进行,做完可明白 “做的是什么,能实现什么” 这个问题。主要内容来自 bilibili 慕课网官方账号 咚咚锵老师 三小时带你入门Django框架,不保证内容完全一致,经自己整理过偏向实用向。

创建路由

创建应用

使用 pycharm 创建,也可以使用 startapp 命令

注册应用

settings.py

INSTALLED_APPS = [  "django.contrib.admin",  "django.contrib.auth",  "django.contrib.contenttypes",  "django.contrib.sessions",  "django.contrib.messages",  "django.contrib.staticfiles",  "blog.apps.BlogConfig"  # 如果使用 pycharm 创建的Django应用则会自动注册
]

编写路由逻辑

blog/views.py

from django.http import HttpResponse  def hello_world(request):  return HttpResponse("helloWorld")

设置应用路由

手动创建 blog/urls.py

from django.urls import path  import blog.views  urlpatterns = [  path("hello_world", blog.views.hello_world),  
]

项目路由中注册应用路由

helloDjango/urls.py

from django.contrib import admin  
from django.urls import path, include  urlpatterns = [  path("admin/", admin.site.urls),  path("blog/", include("blog.urls"))  
]

相当于是一级路由

效果

访问 http://localhost:8000/blog/hello_world

在这里插入图片描述

创建模型层

设计博客模型

字段名称数据类型描述
唯一 ID 标记自增主键用于唯一标识每篇文章的数据库字段。
文章标题字符串表示文章的标题。
作者字符串表示文章的作者。
文章内容字符串表示文章的具体内容。
发布日期日期表示文章的发布日期。

创建博客模型层

blog/models.py

from django.db import models  
from django.db.models import Model  class Article(models.Model):  # 唯一ID标记   
id = models.AutoField(primary_key=True)  # 文章标题   
title = models.CharField(max_length=100)  # 作者   
author = models.CharField(max_length=50)  # 文章内容   
content = models.TextField()  # 发布日期   
publish_date = models.DateTimeField(auto_now=True)

生成变更文件

终端使用 makemigrations 命令

运行迁移文件

终端使用 migrate 命令,同步迁移文件到数据库

使用 Django Shell

控制台输入命令 shell

这是一个方便调试的控制台

执行以下代码

from  blog.models import Article
a = Article()
a.title = 'test_title'
a.author = 'd0ublecl1ck'
a.content = 'hello world test content'
a.save()

发现数据被成功插入

数据库显示

Django Admin 使用

创建管理员用户

使用命令 createsuperuser 创建管理员用户

登录页面进行管理

访问 http://localhost:8000/admin/ 进行登录

登录

在这里插入图片描述

注册 Article 模型到 Admin

要想管理自己的模型,需要先进行注册。

blog/admin.py

from django.contrib import admin  from blog.models import Article  @admin.register(Article)  
class ArticleAdmin(admin.ModelAdmin):  pass

这是 pycharm 默认添加的方式 ,也可以使用下面的方式

from django.contrib import admin  from blog.models import Article  admin.site.register(Article)

在这里插入图片描述

设置显示 Title

在管理页中可以对模型的数据进行增删改查,但是发现显示的标题是 Article object,如果我们想要显示文章标题怎么设置呢?

管理页面

只需要在 article 的模型类中添加以下代码

def __str__(self):  return self.title

在这里插入图片描述

这个时候刷新页面就可以正常显示 title 作为标题了

在这里插入图片描述

使用 Bootstrap

Bootstrap 官方教程

创建 blog/templates

<head> 中引入,具体去官网查 https://v5.bootcss.com/docs/getting-started/introduction/#cdn-links

<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">

使用视图结合模板

blog/views.py

from django.shortcuts import renderdef my_view(request):# 准备上下文数据context = {'title': 'My Page Title','body': 'Here is the page body.',}# 渲染模板并传递上下文return render(request, 'my_template.html', context)

blog/templates/my_template.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>{{ title }}</title>
</head>
<body><h1>{{ title }}</h1><p>{{ body }}</p>
</body>
</html>

RESTful 的简单使用

创建视图

blog/views.py

from django.shortcuts import render  from blog.models import Article  def detail_by_id(request, id):  article = Article.objects.get(id=id)  return render(request, 'article_detail.html', {'article': article})

创建模板文件

blog/templates/article_detail.html

<!DOCTYPE html>  
<html lang="en">  
<head>  <meta charset="UTF-8">  <title>{{ article.title }}</title>  
</head>  
<body>  
<h1>{{ article.title }}</h1>  
<p>作者:{{ article.author }}</p>  
<p>发布日期:{{ article.publish_date }}</p>  
<div>  {{ article.content|linebreaks }}  
</div>  
</body>  
</html>

配置路由

blog/urls.py

from django.urls import path  import blog.views  urlpatterns = [  path("detail/<int:id>", blog.views.detail_by_id),  
]

在这里插入图片描述

使用 Paginator 实现分页

定义分页视图

blog/views.py

from django.shortcuts import render
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from .models import Articledef article_list(request):articles = Article.objects.all()  # 获取所有文章数据page = request.GET.get('page', 1)  # 获取当前页码,默认是第1页paginator = Paginator(articles, 10)  # 每页显示10条数据try:articles_page = paginator.page(page)except PageNotAnInteger:articles_page = paginator.page(1)  # 如果页码不是整数,则显示第一页except EmptyPage:articles_page = paginator.page(paginator.num_pages)  # 如果页码超出范围,则显示最后一页context = {'articles': articles_page  # 将分页后的数据传递给模板}return render(request, 'article_list.html', context)

定义模板

blog/templates/article_list.html

<!DOCTYPE html>  
<html>  
<head>  <title>文章列表</title>  
</head>  
<body>  
<h1>文章列表</h1>  
<ul>  {% for article in articles %}  <li>{{ article.title }}</li>  {% endfor %}  
</ul>  <!-- 分页导航 -->  
<div>  <span>            第 {{ articles.number }} 页 / 共 {{ articles.paginator.num_pages }} 页  </span>  <div>        <!-- 上一页 -->  {% if articles.has_previous %}  <a href="?page={{ articles.previous_page_number }}">上一页</a>  {% endif %}  <!-- 页码 -->  {% for num in articles.paginator.page_range %}  {% if num > articles.number|add:'-4' and num < articles.number|add:'4' %}  {% if articles.number == num %}  <strong>{{ num }}</strong>  {% else %}  <a href="?page={{ num }}">{{ num }}</a>  {% endif %}  {% endif %}  {% endfor %}  <!-- 下一页 -->  {% if articles.has_next %}  <a href="?page={{ articles.next_page_number }}">下一页</a>  {% endif %}  </div>  
</div>  
</body>  
</html>

效果

效果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/61940.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Git的使用_仓库管理_CI/CD介绍

文章目录 一、Git的基础知识一-1、什么是GitLinux命令行的git的简易安装Git项目的组成Git的基本工作流程Git文件的三种状态 一-2、存储库远程存储库与本地存储库创建存储库git init命令的使用方法1. 初始化一个新的 Git 仓库2. 在指定目录初始化一个新的 Git 仓库3. 初始化一个…

畅游Diffusion数字人(6): JoyHallo: Digital human model for Mandarin

Diffusion Models专栏文章汇总:入门与实战 前言:目前音频驱动大部分的论文和数据都是围绕英文输入驱动打造的,应用在东亚人和国语上效果有所降低。与英语相比,普通话中复杂的嘴唇动作使模型训练更加复杂。这篇博客介绍京东提出的数字人技术《JoyHallo: Digital human model…

SpringCloud入门实战-Spring Cloud Stream消息驱动概述

❤️ 《SpringCloud入门实战系列》解锁SpringCloud主流组件入门应用及关键特性。带你了解SpringCloud主流组件,是如何一战解决微服务诸多难题的。项目demo&#xff1a;源码地址 ❤️ 作者&#xff1a;一只IT攻城狮。关注我&#xff0c;不迷路。 ❤️ 再小的收获x365天都会成就…

Flink 安装与入门:开启流式计算新时代

在当今大数据蓬勃发展的时代&#xff0c;数据处理的时效性愈发关键。传统基于先存储再批量处理的数据方式&#xff0c;在面对诸如网站实时监控、异常日志即时分析等场景时&#xff0c;显得力不从心。随着 5G、物联网等技术的兴起&#xff0c;海量数据如潮水般涌来&#xff0c;且…

神经网络归一化方法总结

在深度学习中&#xff0c;归一化 是提高训练效率和稳定性的关键技术。以下是几种常见的神经网络归一化方法的总结&#xff0c;包括其核心思想、适用场景及优缺点。 四种归一化 特性Batch NormalizationGroup NormalizationLayer NormalizationInstance Normalization计算维度…

设计理念与数据反馈:面向火星熔岩管探索的跳跃机器人

随着人类对火星探索的深入&#xff0c;熔岩管作为潜在资源和居住地的科学价值受到广泛关注。然而&#xff0c;这些复杂且规模宏大的地下空间&#xff0c;对传统探测技术提出了严峻挑战。因此&#xff0c;本文介绍了一款专为火星熔岩管探索设计的跳跃机器人&#xff0c;其核心设…

MTK 展锐 高通 sensorhub架构

一、MTK平台 MTK框架可以分为两部分&#xff0c;AP和SCP。 AP是主芯片&#xff0c;SCP是协处理器&#xff0c;他们一起工作来处理sensor数据。 SCP 是用来处理sensor和audio相关功能和其他客制化需求的一个协处理理器&#xff0c;MTK SCP选择freeRTOS作为操作系统&#xff0c…

SD NAND 的 SDIO在STM32上的应用详解

四.SDIO功能框图(重点) SDIO包含2个部分&#xff1a; ● SDIO适配器模块&#xff1a;实现所有MMC/SD/SD I/O卡的相关功能&#xff0c;如时钟的产生、命令和数据的传送。 ● AHB总线接口&#xff1a;操作SDIO适配器模块中的寄存器(由STM32控制SDIO外设)&#xff0c;并产生中断和…

C语言数据结构学习:循环队列

C语言 数据结构学习 汇总入口&#xff1a; C语言数据结构学习&#xff1a;[汇总] 1. 循环队列 队列的博客&#xff1a;C语言数据结构学习&#xff1a;队列 循环队列会预先定义最大队列空间&#xff0c;然后定义一个数组&#xff0c;通过队列头和队列尾指针分别指向开头和结尾&…

leetcode-18-四数之和

题解&#xff1a; 代码&#xff1a;

MySQL45讲 第29讲 如何判断一个数据库是不是出问题了?——阅读总结

文章目录 MySQL45讲 第二十九讲 如何判断一个数据库是不是出问题了&#xff1f;——阅读总结一、检测数据库实例健康状态的重要性二、常见检测方法及问题分析&#xff08;一&#xff09;select 1 判断法&#xff08;二&#xff09;查表判断法&#xff08;三&#xff09;更新判断…

探索Python的HTTP之旅:揭秘Requests库的神秘面纱

文章目录 **探索Python的HTTP之旅&#xff1a;揭秘Requests库的神秘面纱**第一部分&#xff1a;背景介绍第二部分&#xff1a;Requests库是什么&#xff1f;第三部分&#xff1a;如何安装Requests库&#xff1f;第四部分&#xff1a;Requests库的五个简单函数使用方法第五部分&…

指针的奥秘:深入探索内存的秘密

前言 在计算机编程的广阔天地中&#xff0c;指针作为一种独特的数据类型&#xff0c;它不仅是C语言的核心&#xff0c;也是理解计算机内存管理的基石。指针的概念虽然强大&#xff0c;但对于初学者来说&#xff0c;它常常是学习过程中的一个难点。本文旨在揭开指针的神秘面纱&a…

理解clickhouse 里的分区和分片键区别

文章目录 分片分区两分片&#xff0c;0副本的cluster 分片 CREATE TABLE logs_distributed AS logs_local ENGINE Distributed(cluster_name, -- 集群名称database_name, -- 数据库名称logs_local, -- 本地表名cityHash64(user_id) -- 分片键&#xf…

shell脚本(二)

声明&#xff01; 学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团队无关&#…

多模态大型语言模型(MLLM)综述

目录 多模态大语言模型的基础 长短期网络结构(LSTM) 自注意力机制 基于Transformer架构的自然语言处理模型 多模态嵌入的关键步骤 TF-IDF TF-IDF的概念 TF-IDF的计算公式 TF-IDF的主要思路 TF-IDF的案例 训练和微调多模态大语言模型(MLLM) 对比学习 (CLIP, ALIG…

《智慧教育实时数据分析推荐项目》详细分析

一、项目介绍 1、背景介绍 在互联网、移动互联网的带动下&#xff0c;教育逐渐从线下走向线上&#xff0c;在线教育近几年一直处于行业的风口浪尖&#xff0c;那随着基础设施的不断完善&#xff0c;用户需求也发生不少变化&#xff0c;因此传统教育机构、新兴互联网企业都在探…

AI+云环境开发上线项目全流程(sealos)

AI云环境开发上线项目全流程 现在是AI技术爆炸&#x1f4a5;的时代&#xff0c;我们作为开发自然需要跟上时代的潮流&#xff0c;今天就跟大家介绍一款云开发环境&#xff0c;并且搭配AI实现一行代码不用写&#xff0c;直接上线一个完整的项目&#xff08;包含前后端&#xff0…

【C++11】可变参数模板/新的类功能/lambda/包装器--C++

文章目录 一、可变参数模板1、基本语法及原理2、包扩展3、empalce系列接口 二、新的类功能1、默认的移动构造和移动赋值2、成员变量声明时给缺省值3、defult和delete4、final与override 三、STL中一些变化四、lambda1、lambda表达式语法2、捕捉列表3、lambda的应用4、lambda的原…

STM32C011开发(1)----开发板测试

STM32C011开发----1.开发板测试 概述硬件准备视频教学样品申请源码下载参考程序生成STM32CUBEMX串口配置LED配置堆栈设置串口重定向主循环演示 概述 STM32C011F4P6-TSSOP20 评估套件可以使用户能够无缝评估 STM32C0 系列TSSOP20 封装的微控制器功能&#xff0c;基于 ARM Corte…