Django 学习笔记(Day1)

「写在前面」

本文为千锋教育 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.mzph.cn/news/740159.shtml

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

相关文章

Linux-gdb调试

文章目录 前言查看&#xff08;显示&#xff09;源代码 list/l运行程序run/r打断点b查看断点删除断点打开/关闭断点逐过程 逐语句查看变量常显示continuefinishuntil修改指定变量退出gdb 前言 GDB&#xff0c;即GNU调试器&#xff08;GNU Debugger&#xff09;&#xff0c;是G…

细粒度IP定位参文27(HGNN):Identifying user geolocation(2022年)

[27] F. Zhou, T. Wang, T. Zhong, and G. Trajcevski, “Identifying user geolocation with hierarchical graph neural networks and explainable fusion,” Inf. Fusion, vol. 81, pp. 1–13, 2022. (用层次图、神经网络和可解释的融合来识别用户的地理定位) 论文地址:…

QML 控件添加键盘事件

在QML中&#xff0c;可以使用Keys类型来处理键盘事件。以下是一个简单的示例&#xff0c;演示如何在QML控件中添加键盘事件&#xff1a; import QtQuick 2.12 import QtQuick.Window 2.12Window {visible: truewidth: 640height: 480title: qsTr("Hello World")Recta…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的常见车型识别系统(Python+PySide6界面+训练代码)

摘要&#xff1a;本文深入探讨了如何应用深度学习技术开发一个先进的常见车型识别系统。该系统核心采用最新的YOLOv8算法&#xff0c;并与早期的YOLOv7、YOLOv6、YOLOv5等版本进行性能比较&#xff0c;主要评估指标包括mAP和F1 Score等。详细解析了YOLOv8的工作机制&#xff0c…

5.Java并发编程—JUC线程池架构

JUC线程池架构 在Java开发中&#xff0c;线程的创建和销毁对系统性能有一定的开销&#xff0c;需要JVM和操作系统的配合完成大量的工作。 JVM对线程的创建和销毁&#xff1a; 线程的创建需要JVM分配内存、初始化线程栈和线程上下文等资源&#xff0c;这些操作会带来一定的时间和…

【基于langchain + streamlit 完整的与文档对话RAG】

本地部署文档问答webdemo 支持 pdf支持 txt支持 doc/docx支持 源文档索引 你的点赞和收藏是我持续分享优质内容的动力哦~ 废话不多说直接看效果 准备 首先创建一个新环境&#xff08;选择性&#xff09; conda create -n chatwithdocs python3.11 conda activate chatwith…

封装的echarts子组件使用watch监听option失效的问题

项目场景&#xff1a; 我在项目里面封装了一个echarts组件&#xff0c;组件接收一个来自外部的option,然后我用了一个watch函数去监听这个option的变化&#xff0c;option变化之后&#xff0c;销毁&#xff0c;然后再新建一个charts表 碎碎念 问题如标题所示&#xff0c;这篇…

自然语言处理: 第十五章RAG(Retrieval Augmented Generation)

论文地址: [2005.11401] Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks (arxiv.org) 代码地址: 可以参考百度文心一言为例子&#xff0c;与本文代码无关 本篇文章主要是介绍Retrieval Augmented Generation下文简称RAG技术的实现原理和代码实现以及大体…

【Springboot】--如何将springboot+vue项目部署到云服务器?

目录 一、准备工作 1、购买云服务器 2、获取面板地址 二、jdk和数据库 1、安装环境 2、配置jdk环境变量 3、java版本的问题 4、添加数据库 三、前端部署 1、vue 2、创建站点 ​编辑 四、后端部署 1、application.yml 2、idea打包 3、运行jar包 4、开放端口 五、…

扩散模型基础学习

扩散模型基础学习 AIGC是什么扩散模型的发展VAEGANDDPMstable Diffusion 基于transformer架构的Diffusion模型transformer 参考 AIGC是什么 AIGC&#xff0c;全称AI generated content (人工智能生产内容)&#xff0c;是一种利用AI自动生产内容的生产方式。 其发展依赖以下三个…

20240309web前端_第一周作业_完成用户注册界面

作业一&#xff1a;完成用户注册界面 成果展示&#xff1a; 完整代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-…

java SSM二手交易网站系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM厂房管理系统是一套完善的web设计系统&#xff08;系统采用SSM框架进行设计开发&#xff0c;springspringMVCmybatis&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S…

C++day2——引用、结构体、类

思维导图&#xff1a; 2、自己封装一个矩形类(Rect)&#xff0c; 拥有私有属性&#xff1a;宽度(width)、高度(height)&#xff0c; 定义公有成员函数初始化函数:void init(int w, int h) 更改宽度的函数:set_w(int w)更改高度的函数:set_h(int h) 输出该矩形的周长和面积函…

Mac上使用M1或M2芯片的设备安装Node.js时遇到一些问题,比如卡顿或性能问题

对于Mac上使用M1或M2芯片的设备可能会遇到在安装Node.js时遇到一些问题&#xff0c;比如卡顿或性能问题。这可能是因为某些软件包或工具在M1或M2芯片上的兼容性不佳。为了解决这个问题&#xff0c;您可以尝试以下方法&#xff1a; 1. 使用Rosetta模式 对于一些尚未适配M1或M2…

剧本杀小程序开发:解锁推理乐趣,畅享剧情盛宴

在繁忙的生活中&#xff0c;我们总是期待一份不期而遇的惊喜。今天&#xff0c;就让我们一起打开“盲盒一番赏”小程序&#xff0c;探索那份属于你的独特惊喜吧&#xff01; “盲盒一番赏”小程序&#xff0c;是一个集合了丰富多样的盲盒商品的线上平台。无论你是盲盒控&#…

20240312-1-Graph(图)

Graph(图) 在面试的过程中,一般不会考到图相关的问题,因为图相关的问题难,而且描述起来很麻烦. 但是也会问道一下常见的问题,比如,最短路径,最小支撑树,拓扑排序都被问到过. 图常用的表示方法有两种: 分别是邻接矩阵和邻接表. 邻接矩阵是不错的一种图存储结构,对于边数相对顶点…

Vue3全家桶 - Vue3 - 【4】侦听器

侦听器 一、 组合式API&#xff1a; 1.1 watch()函数 创建侦听器: 语法:// 先导入 watch 函数 import { watch } from vue watch(source, callback, options)source&#xff1a; 需要侦听的数据源&#xff0c;可以是 ref&#xff08;包括计算属性&#xff09;、一个响应式对…

Linux内核介绍and下载

Linux内核介绍and下载 介绍下载下载历史版本 我是将军我一直都在&#xff0c;。&#xff01; 介绍 ● Linux是c语言写成的 ● 符合POSIX标准 ● 作者是芬兰的Linus Torvalds ● 发展依赖于五个重要支柱: unix操作系统、minix操作系统、 GNU计划、POSIX标准和互联网 ● 2.6之后…

打卡--MySQL8.0 二 (用户权限管理)

一、mysql8修改了安全规则&#xff0c;不能像mysql5.7 一次性创建用户并授权&#xff0c;需要分批创建。 1、注意在MySQL8.0版本中创建用户一定要在配置文件中增加如下内容&#xff0c;来兼容旧的程序运行。 default_authentication_pluginmysql_native_password 2、创建用户…

全景解析 Partisia Blockchain:以用户为中心的全新数字经济网络

在区块链世界中&#xff0c;以比特币、以太坊网络为代表的主流区块链奠定了该领域早期的基础&#xff0c;并让去中心化、点对点、公开透明以及不可逆成为了该领域固有的意识形态。事实上&#xff0c;过于透明正在成为区块链规模性采用的一大障碍&#xff0c;我们看到 90% 以上的…