Django 学习笔记(Day1)

news2024/11/25 12:37:08

「写在前面」

本文为千锋教育 Django 教程的学习笔记。本着自己学习、分享他人的态度,分享学习笔记,希望能对大家有所帮助。


目录

  • 0 课程介绍
  • 1 Django 快速入门
    • 1.1 Django 介绍
    • 1.2 Django 安装
    • 1.3 创建 Django 项目
    • 1.4 运行 Django 项目
    • 1.5 数据迁移
    • 1.6 创建应用App
    • 1.7 视图Views
    • 1.8 路由Route
    • 1.9 模型Model
    • 1.10 后台管理Admin

0 课程介绍

P1:https://www.bilibili.com/video/BV1fh4y1Z7jp?p=1

alt

1 Django 快速入门

1.1 Django 介绍

P2:https://www.bilibili.com/video/BV1fh4y1Z7jp?p=2

Django 官网:https://docs.djangoproject.com/en/4.2/

本教程使用的是 Django 4.2 版本

Django 是一个开放源代码的 Web 应用框架,由 Python 写成。采用了 MTV 的框架模式,即模型 M视图 V模版 T。它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是 CMS (内容管理系统)软件。并于 2005 年 7 月在 BSD 许可证下发布。这套框架是以比利时的吉普赛爵士吉他手 Django Reinhardt 来命名的。

1.2 Django 安装

P3:https://www.bilibili.com/video/BV1fh4y1Z7jp?p=3

1.3 创建 Django 项目

P4:https://www.bilibili.com/video/BV1fh4y1Z7jp?p=4

创建一个 Django 项目:

django-admin startproject HelloDjango

创建项目后,默认的目录结构:

  • manage.py:
    • 是 Django 用于管理本项目的命令行工具,之后进行站点运行,数据库自动生成等都是通过本文件完成。
  • HelloDjango/__init__.py:
    • 告诉 python 该目录是一个 python 包,暂无内容,后期一些工具的初始化可能会用到
  • HelloDjango/settings.py:
    • Django 项目的配置文件,默认状态其中定义了本项目引用的组件,项目名,数据库,静态资源等。
  • HelloDjango/urls.py:
    • 维护项目的 URL 路由映射,即定义当客户端访问时由哪个模块进行响应。
  • HelloDjango/wsgi.py:
    • 全称为 Python Web Server Gateway Interface,即 Python 服务器网关接口,是 Python 应用与 web 服务器之间的接口,用于 Django 项目在服务器上的部署和上线,一般不需要修改。
  • HelloDjango/asgi.py:
    • 定义 ASGI 的接口信息,和 WSGI 类似,在 3.0 以后新增 ASGI,相比 WSGI,ASGI 实现了异步处理,用于启动异步通信服务,比如:实现在线聊天等异步通信功能。(类似 Tornado 异步框架)

P5:https://www.bilibili.com/video/BV1fh4y1Z7jp?p=5

settings.py 文件详解:

from pathlib import Path

# 项目根目录
BASE_DIR = Path(__file__).resolve().parent.parent

# 项目的密钥
SECRET_KEY = 'django-insecure-@o$)(@-s)t(jenz*5wbs^7-tohe)(d=equv7k3t4at6&2p9v_3'

# 是否调试模式
# True: 表示调试模式,自动重启,一般用于开发过程中
# False: 表示非调试模式,一般用于上线部署
DEBUG = True

# 被允许的域名或IP
# * : 表示通配符,匹配所有的IP,表示可以被其他任何电脑来访问我(局域网)
# 上线后可以指定其他哪些服务器来访问我
ALLOWED_HOSTS = ['*']

# 定义应用
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',

# 定义自己的应用
'user',
'App',
]

# 中间件
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

# 根路由
ROOT_URLCONF = 'DjangoPro2.urls'

# 模板
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'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',
],
},
},
]

# wsgi目录
WSGI_APPLICATION = 'DjangoPro2.wsgi.application'

# Database
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}

# 密码验证
AUTH_PASSWORD_VALIDATORS = [
{
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
},
]


# 国际化
LANGUAGE_CODE = 'zh-hans' # en-us英语,zh-hans中文
TIME_ZONE = 'UTC'
USE_I18N = True
USE_TZ = True


# 静态文件 (CSS, JavaScript, Images)
STATIC_URL = 'static/'

# 默认的主键字段类型
# Default primary key field type
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'

1.4 运行 Django 项目

P6:https://www.bilibili.com/video/BV1fh4y1Z7jp?p=6

运行 Django 项目:

python manage.py runserver [ip:port]

可以直接进行服务运行,默认执行起来的端口是 8000

也可以自己指定 ip 和端口:

  1. 监听机器所有可用 ip (电脑可能有多个内网 ip 或多个外网 ip) ︰
python manage.py runserver 0.0.0.0:8000
  1. 同时在 settings.py 中将
ALLOWED_HOSTS=['*']
  1. 在其他局域网电脑上可以通过在浏览器输入 Django 项目所在电脑的 IP:8000 来访问

1.5 数据迁移

P7:https://www.bilibili.com/video/BV1fh4y1Z7jp?p=7

迁移的概念: 就是将模型映射到数据库的过程

生成迁移文件:

python manage.py makemigrations

执行迁移:

python manage.py migrate

不需要初始化迁移文件夹,每个应用默认有迁移文件夹 migrations

1.6 创建应用App

P8:https://www.bilibili.com/video/BV1fh4y1Z7jp?p=8

创建一个 App:

python manage.py startapp App

创建后需要在 settings.py 中将应用加入到 INSTALLED_APPS 选项中:

INSTALLED_APPS = [
# 定义自己的应用
'App',
]

应用目录介绍:

  • __init__.py:
    • 其中暂无内容,使得 app 成为一个包
  • admin.py:
    • 管理站点模型的声明文件,默认为空
  • apps.py:
    • 应用信息定义文件,在其中生成了 AppConfig,该类用于定义应用名等数据
  • models.py:
    • 添加模型层数据类文件
  • views.py:
    • 定义 URL 相应函数
  • migrations:
    • 自动生成,生成迁移文件的
  • tests.py:
    • 测试代码文件

1.7 视图Views

P9:https://www.bilibili.com/video/BV1fh4y1Z7jp?p=9

user/views.py 文件内容:

from django.shortcuts import render
from django.http import HttpResponse

# 视图函数Views
def index(request):
pass
# 返回相应 response
return HttpResponse('Hello Django!')

# 渲染模板render,渲染html
return render(request, 'index.html')

user/templates/index.html 文件内容:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h2>首页</h2>
<hr>

<h4>Hello Django!</h4>

</body>
</html>

DjangoPro2/urls.py 文件内容:

from django.contrib import admin
from django.urls import path
from user.views import *

urlpatterns = [
# 路由url
# 直接访问视图函数,没有使用子路由
path('index/', index),

path('admin/', admin.site.urls),
]

访问 127.0.0.1:8000/index/ 返回 index.html 内容

P10:https://www.bilibili.com/video/BV1fh4y1Z7jp?p=10

HTTP 协议前后端交互:

alt

P11:https://www.bilibili.com/video/BV1fh4y1Z7jp?p=11

Django 框架流程:

alt

1.8 路由Route

P12:https://www.bilibili.com/video/BV1fh4y1Z7jp?p=12

使用子路由

DjangoPro2/urls.py 文件内容:

from django.contrib import admin
from django.urls import path, include
from user.views import *

urlpatterns = [
# 使用子路由
# 一个应用对应一个子路由
path('user/', include('user.urls')),

path('admin/', admin.site.urls),
]

user/urls.py 文件内容:

from django.urls import path
from user.views import *

# 子路由
urlpatterns = [
path('index/', index, name='index'),
path('index2/', index2, name='index2'),
]

user/views.py 文件内容:

from django.http import HttpResponse

def index(request):
return HttpResponse('Index')

def index2(request):
return HttpResponse('Index2')

访问 127.0.0.1:8000/user/index/ 返回 Index
访问 127.0.0.1:8000/user/index2/ 返回 Index2

1.9 模型Model

P13:https://www.bilibili.com/video/BV1fh4y1Z7jp?p=13

user/models.py 文件内容:

from django.db import models

# 模型Model <==> 表结构
# 类属性 <==> 表字段
# 对象 <==> 表的一行记录
class UserModel(models.Model):
name = models.CharField(max_length=30, unique=True) # 对应的SQL: name varchar(30)
age = models.IntegerField(default=18) # 对应的SQL: age int defalut 18
sex = models.CharField(max_length=20) # 对应的SQL: sex varchar(20)
is_deleted = models.BooleanField(default=False)

执行数据迁移:

python manage.py makemigrations

python manage.py migrate

会在数据库中生成一张名为 user_usermodel 的表,给表中添加数据:

alt

user/views.py 文件内容:

from django.shortcuts import render
from user.models import *

def get_users(request):
# 模型操作;获取所有user
users = UserModel.objects.all()
return render(request, 'users.html', {'users': users})

user/templates/users.html 文件内容:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>所有用户</title>
</head>
<body>
<h2>所有用户</h2>
<hr>

<ul>
{% for user in users %}
<li>{{ user.name }},{{ user.age }}</li>
{% endfor %}
</ul>


</body>
</html>

user/urls.py 文件内容:

from django.urls import path
from user.views import *

# 子路由
urlpatterns = [
path('users/', get_users, name='users'),
]

访问 127.0.0.1:8000/user/users/ 返回:

alt

1.10 后台管理Admin

P14:https://www.bilibili.com/video/BV1fh4y1Z7jp?p=14

后台管理系统的使用步骤:

  1. 在 user/admin.py 文件中注册对应的模型
from django.contrib import admin
from user.models import *

admin.site.register(UserModel)
  1. 需要创建超级管理员的账号和密码
python manage.py createsuperuser
  1. 根路由 DjangoPro2/urls.py 中添加
from django.contrib import admin
from django.urls import path

urlpatterns = [
path('admin/', admin.site.urls),
]
  1. 访问后台管理系统:http://127.0.0.1:8000/admin/

「结束」

注:本文为个人学习笔记,仅供大家参考学习,不得用于任何商业目的。如有侵权,请联系作者删除。

alt

本文由 mdnice 多平台发布

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

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

相关文章

使用 Ruby 或 Python 在文件中查找

对于经常使用爬虫的我来说&#xff0c;在大多数文本编辑器都会有“在文件中查找”功能&#xff0c;主要是方便快捷的查找自己说需要的内容&#xff0c;那我有咩有可能用Ruby 或 Python实现类似的查找功能&#xff1f;这些功能又能怎么实现&#xff1f; 问题背景 许多流行的文本…

vite 安装tailwindcss失效

需求&#xff1a;在vite5 vue3 ts中安装tailwindcss 问题&#xff1a;按照tailwindcss的官方文档进行安装&#xff0c;可是一直不生效 解决方式&#xff1a; 在mian.ts 里面导出 style.css 文件 就可以了哈

【HomeAssistant新版文件管理器】

【HomeAssistant新版文件管理器】 1. 前言2. 地址3. 安装4. 使用方法5. 总结欢迎大家阅读2345VOR的博客【Home Assistant 之QQ邮箱推送提醒】🥳🥳🥳2345VOR鹏鹏主页: 已获得CSDN《嵌入式领域优质创作者》称号🎉🎉、阿里云《arduino专家博主》👻👻👻,座右铭:…

基于Springboot的预报名管理系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的预报名管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&a…

从根到叶:深入了解Map和Set

窗间映出一片高远的天空&#xff0c; 向晚的天际宁静而又清明。 我孤独的心灵在幸福地哭泣&#xff0c; 它在为天空如此美好而高兴。 恬静的晚霞一片火红&#xff0c; 晚霞灼烧着我的热情。 此刻的世界没有别人&#xff0c; 只有上帝&#xff0c;我和天空。 ——&#x…

【vivado】 clock wizard 时钟IP

一、前言 MMCM和PLL是在FPGA设计中不可避免需要使用到的时钟资源&#xff0c;对于其功能及使用方法的理解是正确进行FPGA设计的前提。 二、Xilinx 时钟 IP配置 vivado中使用时钟向导(Clocking Wizard)配置时钟IP核&#xff0c;其框图如下&#xff1a; clk_in 输入时钟&#…

Grafana

介绍 官网&#xff1a;https://grafana.com/ Grafana 是一个开源的指标分析和可视化工具&#xff0c;它被广泛用于展示和监控云基础设施和应用程序的实时数据。Grafana 提供了一个强大且易于使用的界面&#xff0c;允许用户创建各种图表、图形和仪表盘&#xff0c;以直观地展…

【漏洞复现】大华智慧园区综合管理平台SQL注入漏洞

Nx01 产品简介 大华智慧园区综合管理平台是一款综合管理平台&#xff0c;具备园区运营、资源调配和智能服务等功能。该平台旨在协助优化园区资源分配&#xff0c;满足多元化的管理需求&#xff0c;同时通过提供智能服务&#xff0c;增强使用体验。 Nx02 漏洞描述 大华智慧园区…

Web3:数字身份与隐私保护的新篇章

1. 数字身份验证的革新 在传统互联网上&#xff0c;个人的数字身份通常由中心化的身份验证机构控制&#xff0c;存在安全性和隐私保护的风险。而在Web3中&#xff0c;基于区块链技术的去中心化身份验证方案正在兴起。通过使用分布式账本和加密技术&#xff0c;Web3可以提供更安…

122. 买卖股票的最佳时机 II(力扣LeetCode)

文章目录 122. 买卖股票的最佳时机 II题目描述贪心 122. 买卖股票的最佳时机 II 题目描述 给你一个整数数组 prices &#xff0c;其中 prices[i] 表示某支股票第 i 天的价格。 在每一天&#xff0c;你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。…

力扣题目汇总分析 利用单调栈解决问题

496 下一个更大元素 I 问题 nums1 中数字 x 的 下一个更大元素 是指 x 在 nums2 中对应位置 右侧 的 第一个 比 x 大的元素。给你两个 没有重复元素 的数组 nums1 和 nums2 &#xff0c;下标从 0 开始计数&#xff0c;其中nums1 是 nums2 的子集。为nums1中每个数字 x找到下一…

nvm 的安装与管理 node.js

文章目录 下载 nvm使用 nvm 下载与管理 node.jsnpm 切换镜像源使用 cnpm使用 yarn 下载 nvm NVM是Node.js的版本管理工具&#xff0c;它允许你轻松地在同一台机器上安装和切换不同版本的Node.js。使用NVM&#xff0c;你可以在不同的项目中使用不同的Node.js版本&#xff0c;而…

按键+串口发送实验

摸鱼记录 Day_15 &#xff5e;(&#xffe3;▽&#xffe3;&#xff5e;)(&#xff5e;&#xffe3;▽&#xffe3;)&#xff5e; review 前边已经学习了&#xff1a; 串口发送Vivado 串口通信(UART)------串口发送-CSDN博客 按键基于状态机的按键消抖实现-CSDN博客 1. …

WanAndroid(鸿蒙版)开发的第二篇

前言 DevEco Studio版本&#xff1a;4.0.0.600 WanAndroid的API链接&#xff1a;玩Android 开放API-玩Android - wanandroid.com 1、WanAndroid(鸿蒙版)开发的第一篇 其他一些参考点&#xff0c;请参考上面的WanAndroid开发第一篇 效果 首页实现 整体布局分为头部的Banne…

ARM学习(25)链接装载高阶认识

ARM学习&#xff08;25&#xff09;链接装载高阶认识 1、例子引出 笔者先引入几个编译链接的例子来介绍一下&#xff1a; 声明无效&#xff1a;declared implicitly&#xff1f;&#xff0c;属于编译错误还是链接错误&#xff1f; 编译阶段的错误&#xff0c;属于编译错误&am…

《量子计算:下一个大风口,还是一个热炒概念?》

引言 量子计算,作为一项颠覆性的技术,一直以来备受关注。它被认为是未来计算领域的一次革命,可能改变我们对计算能力和数据处理的理解。然而,随着技术的不断进步和商业应用的探索,人们开始思考,量子计算到底是一个即将到来的大风口,还是一个被过度炒作的概念? 量子计…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的夜间车辆检测系统(深度学习代码+UI界面+训练数据集)

摘要&#xff1a;开发夜间车辆检测系统对于自动驾驶技术具有关键作用。本篇博客详细介绍了如何运用深度学习构建一个夜间车辆检测系统&#xff0c;并提供了完整的实现代码。该系统基于强大的YOLOv8算法&#xff0c;并对比了YOLOv7、YOLOv6、YOLOv5&#xff0c;展示了不同模型间…

Hadoop学习1:概述、单体搭建、伪分布式搭建

文章目录 概述基础知识Hadoop组件构成Hadoop配置文件 环境准备配置Hadoop配置下载配置环境变量 Hadoop运行模式Standalone Operation&#xff08;本地&#xff09;官方DemoWordCount单词统计Demo Pseudo-Distributed Operation&#xff08;伪分布式模式&#xff09;配置修改启动…

vscode使用remote-ssh免密连接服务器

你还在使用XShell、Hyper、FinalShell等等SSH客户端软件吗&#xff0c;作为前端的我们&#xff0c;一直在用的功能强大的开发工具vscode&#xff0c;早已实现SSH连接功能&#xff08;借助官方提供的插件&#xff09;。而且更加好用&#xff0c;可以直接打开服务器上的文件&…

使用npm版本管理工具解决npm 的EACCES permissions errors when installing packages globally错误

EACCES错误通常表示“权限被拒绝”&#xff0c;意味着您没有足够的权限来执行某个操作。在计算机领域&#xff0c;尤其是在文件系统和程序安装中&#xff0c;这个错误很常见。以下是可能导致EACCES错误的原因以及相应的解决方法&#xff1a; 文件系统权限&#xff1a;当您尝试…