Django详细教程(一)

文章目录

  • 一、安装Django
  • 二、创建项目
    • 1.终端创建项目
    • 2.Pycharm创建项目(专业版才可以)
    • 3.默认文件介绍
  • 三、创建app
    • 1.app介绍
    • 2.默认文件介绍
  • 四、快速上手
    • 1.写一个网页
      • 步骤1:注册app 【settings.py】
      • 步骤2:编写URL和视图函数对应关系 【urls.py】
      • 步骤3:编写视图函数 【views.py】
      • 步骤4:启动django项目
    • 2.url与view的对应关系
    • 3.templates模板
    • 4.静态文件
      • static目录
      • html引用静态文件
  • 五、模板语法案例:伪联通新闻中心
  • 六、请求和响应案例:用户登录
  • 七、数据库操作
    • 1.安装第三方模块
    • 2.ORM框架操作表
      • 步骤1:自己创建数据库
      • 步骤2:django连接数据库
      • 步骤3:类操作表
    • 3.ORM框架操作数据
      • 新建
      • 删除
      • 获取
      • 更新
  • 八、案例:用户管理
    • 功能1:展示用户
    • 功能2:添加用户
    • 功能3:删除用户

Django是一个高级的Python Web框架,可以快速开发安全和可维护的网站。由经验丰富的开发者构建,Django负责处理网站开发中麻烦的部分,可以专注于编写应用程序,而无需重新开发。它是免费和开源的,有活跃繁荣的社区,丰富的文档,以及很多免费和付费的解决方案。

一、安装Django

  • pip install django
  • 此时python文件夹的目录:
c:\python39- python.exe- Scripts- pip.exe- django-admin.exe   【工具,创建django项目中的文件和文件夹】- Lib- 内置模块- site-packages- openpyxl- python-docx- flask- django         【框架的源码】

二、创建项目

1.终端创建项目

  • 打开终端。
  • 进入某个目录(项目放在哪里)。
 /Users/wupeiqi/PycharmProjects/gx
  • 执行命令创建项目
 "c:\python39\Scripts\django-admin.exe" startproject 项目名称
  • 如果 c:\python39\Scripts 已加入环境系统环境变量。
django-admin startproject 项目名称

2.Pycharm创建项目(专业版才可以)

在这里插入图片描述
在这里插入图片描述

  • 命令行,创建的项目才是标准的。
  • pycharm,在标准的基础上默认给咱们加了点东西。
    • 创建了一个templates目录【一般在app内部使用,而不用全局的templates。要删除】
    • settings.py中【这句代码表示:每次先查找全局templates,再遍历每个app的templates。要删除】

在这里插入图片描述

3.默认文件介绍

mysite
├── manage.py         【项目的管理,启动项目、创建app、数据管理】【不要动】【***常常用***】
└── mysite├── __init__.py├── settings.py    【项目配置】          【***常常修改***】├── urls.py        【URL和函数的对应关系】【***常常修改***】├── asgi.py        【接收网络请求】【不要动】└── wsgi.py        【接收网络请求】【不要动】

三、创建app

1.app介绍

  • 我们开发比较简洁,用不到多app,一般情况下,项目下创建1个app即可
  • 一个项目也可以创建多个app:
- 项目- app,用户管理【表结构、函数、HTML模板、CSS】- app,订单管理【表结构、函数、HTML模板、CSS】- app,后台管理【表结构、函数、HTML模板、CSS】- app,网站   【表结构、函数、HTML模板、CSS】- app,API    【表结构、函数、HTML模板、CSS】...

在这里插入图片描述

2.默认文件介绍

├── app01
│   ├── __init__.py
│   ├── admin.py         【固定,不用动】django默认提供了admin后台管理。
│   ├── apps.py          【固定,不用动】app启动类
│   ├── migrations       【固定,不用动】数据库变更记录
│   │   └── __init__.py
│   ├── models.py        【**重要**】,对数据库操作。
│   ├── tests.py         【固定,不用动】单元测试
│   └── views.py         【**重要**】,函数。
├── manage.py
└── mysite2├── __init__.py├── asgi.py├── settings.py├── urls.py          【URL->函数】└── wsgi.py

四、快速上手

1.写一个网页

步骤1:注册app 【settings.py】

在这里插入图片描述

步骤2:编写URL和视图函数对应关系 【urls.py】

在这里插入图片描述

步骤3:编写视图函数 【views.py】

在这里插入图片描述

步骤4:启动django项目

  • 命令行启动
 python manage.py runserver 
  • Pycharm启动

在这里插入图片描述

2.url与view的对应关系

在这里插入图片描述

3.templates模板

  • 可以放html、css等

在这里插入图片描述

4.静态文件

static目录

  • 需要自己创建

在这里插入图片描述

html引用静态文件

  • Django推荐使用{% load static %}的方法导入

在这里插入图片描述

五、模板语法案例:伪联通新闻中心

注意templates

  • url

在这里插入图片描述

  • view

在这里插入图片描述

  • html

在这里插入图片描述

  • 效果

在这里插入图片描述

六、请求和响应案例:用户登录

注意GET和POST请求的区别

  • url

在这里插入图片描述

  • view

在这里插入图片描述

  • html

在这里插入图片描述

七、数据库操作

相较于MySQL数据库 + pymysql的复杂操作,Django提供了更便捷的ORM框架

1.安装第三方模块

  • 直接安装:pip install mysqlclient
  • 官网安装:

在这里插入图片描述

2.ORM框架操作表

步骤1:自己创建数据库

  • 启动MySQL服务

  • 自带工具创建数据库

 create database gx_day15 DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

在这里插入图片描述

步骤2:django连接数据库

  • 在settings.py文件中进行配置和修改。
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'gx_day15',  # 数据库名字'USER': 'root','PASSWORD': 'root123','HOST': '127.0.0.1',  # 本台机器安装了MySQL'PORT': 3306,}
}

在这里插入图片描述

步骤3:类操作表

在models.py文件中操作表

  • 创建、新增、删除、修改直接在上面操作即可
  • 创建表

在这里插入图片描述

  • 等价于:
create table app01_userinfo(id bigint auto_increment primary key,name varchar(32),password varchar(64),age int
)
  • 最后还要执行命令:
python3.9 manage.py makemigrations
python3.9 manage.py migrate

在这里插入图片描述

注意

  • 在表中新增列时,由于已存在列中可能已有数据,所以新增列必须要指定新增列对应的数据:
【设置默认值】age = models.IntegerField(default=2)【允许为空】data = models.IntegerField(null=True, blank=True)
  • 以后在开发中如果想要对表结构进行调整:在models.py文件中操作类即可。

  • 结束要执行命令:

 python3.9 manage.py makemigrationspython3.9 manage.py migrate

3.ORM框架操作数据

新建

Department.objects.create(title="销售部")
Department.objects.create(title="IT部")
Department.objects.create(title="运营部")
UserInfo.objects.create(name="武沛齐", password="123", age=19)
UserInfo.objects.create(name="朱虎飞", password="666", age=29)
UserInfo.objects.create(name="吴阳军", password="666")

删除

UserInfo.objects.filter(id=3).delete()
Department.objects.all().delete()

获取

3.1 获取符合条件的所有数据
data_list = [对象,对象,对象]  QuerySet类型
data_list = UserInfo.objects.all()
for obj in data_list:print(obj.id, obj.name, obj.password, obj.age)3.1 获取第一条数据【对象】
row_obj = UserInfo.objects.filter(id=1).first()
print(row_obj.id, row_obj.name, row_obj.password, row_obj.age)

更新

UserInfo.objects.all().update(password=999)
UserInfo.objects.filter(id=2).update(age=999)
UserInfo.objects.filter(name="朱虎飞").update(age=999)

八、案例:用户管理

功能1:展示用户

  • url增加info/list
from django.contrib import admin
from django.urls import path
from blog import viewsurlpatterns = [path('admin/', admin.site.urls),path('index_app/', views.index_app),path('user_list/', views.user_list),path('tpl/', views.tpl),path('something/', views.something),path('login/', views.login),path('orm/', views.orm),path('info/list/', views.info_list)
]
  • view
from blog.models import UserInfo
...def info_list(request):data_list = UserInfo.objects.all()return render(request, "info_list.html", {"data_list": data_list})
  • info_list.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Document</title>
</head>
<body><table border="1"><thead><tr><th>ID</th><th>姓名</th><th>密码</th><th>年龄</th></tr></thead><tbody>{% for obj in data_list %}<tr><td>{{ obj.id }}</td><td>{{ obj.name }}</td><td>{{ obj.password }}</td><td>{{ obj.age }}</td></tr>{% endfor %}</tbody></table>
</body>
</html>
  • 效果

请添加图片描述

功能2:添加用户

  • url增加info/add
from django.contrib import admin
from django.urls import path
from blog import viewsurlpatterns = [path('admin/', admin.site.urls),path('index_app/', views.index_app),path('user_list/', views.user_list),path('tpl/', views.tpl),path('something/', views.something),path('login/', views.login),path('orm/', views.orm),path('info/list/', views.info_list),path('info/add/', views.info_add),
]
  • view
def info_add(request):if request.method == "GET":return render(request, 'info_add.html')# 获取用户提交的数据name = request.POST.get("name")password = request.POST.get("password")age = request.POST.get("age")# 添加到数据库UserInfo.objects.create(name=name, password=password, age=age)# 自动跳转return redirect("/info/list/")
  • info_add.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Document</title>
</head>
<body><form action="/info/add/" method="post">{% csrf_token %}<input type="text" name="name" placeholder="用户名"><input type="text" name="password" placeholder="密码"><input type="text" name="age" placeholder="年龄"><input type="submit" value="提交"></form>
</body>
</html>
  • 效果:点击“提交”可以跳转到展示

请添加图片描述
请添加图片描述

  • 在info/list页面增加"添加"按钮,修改info_list.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Document</title>
</head>
<body><a href="/info/add">添加</a><table border="1"><thead><tr><th>ID</th><th>姓名</th><th>密码</th><th>年龄</th></tr></thead><tbody>{% for obj in data_list %}<tr><td>{{ obj.id }}</td><td>{{ obj.name }}</td><td>{{ obj.password }}</td><td>{{ obj.age }}</td></tr>{% endfor %}</tbody></table>
</body>
</html>
  • 效果:点击"添加"后,即可跳转回添加页面

请添加图片描述

功能3:删除用户

  • url增加info/delete
from django.contrib import admin
from django.urls import path
from blog import viewsurlpatterns = [path('admin/', admin.site.urls),path('index_app/', views.index_app),path('user_list/', views.user_list),path('tpl/', views.tpl),path('something/', views.something),path('login/', views.login),path('orm/', views.orm),path('info/list/', views.info_list),path('info/add/', views.info_add),path('info/delete/', views.info_delete)
]
  • view
def info_delete(request):nid = request.GET.get("nid")UserInfo.objects.filter(id=nid).delete()return redirect("/info/list/")
  • info_delete.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Document</title>
</head>
<body><a href="/info/add">添加</a><table border="1"><thead><tr><th>ID</th><th>姓名</th><th>密码</th><th>年龄</th><th>操作</th></tr></thead><tbody>{% for obj in data_list %}<tr><td>{{ obj.id }}</td><td>{{ obj.name }}</td><td>{{ obj.password }}</td><td>{{ obj.age }}</td><td><a href="/info/delete?nid={{ obj.id }}">删除</a></td></tr>{% endfor %}</tbody></table>
</body>
</html>
  • 效果:浏览器访问,点击"删除"即可将对应的行删除

请添加图片描述

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

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

相关文章

mysql权限相关操作

创建mysql用户并开通某数据库的特定权限 CREATE USER username% IDENTIFIED BY 123456; GRANT INSERT,DELETE,UPDATE,SELECT ON xxxdb.* TO username%; GRANT ALL PRIVILEGES ON caieinstitute.* TO caie%;//给全部管理权限 修改某用户登录所需使用的IP select * from user w…

面试题:@Component, @Service, @Repository, @Controller 注解的区别与用途

在Spring框架中&#xff0c;Component, Service, Repository, 和 Controller 都是用来标记Bean并将其纳入Spring IoC容器管理的注解&#xff0c;它们的主要区别在于用途和语义上的强调&#xff0c;旨在提高代码的可读性和更好的组织架构。 1. Component - 用途这是Spring中定…

基于微信小程序的校园服务平台设计与实现(程序+论文)

本文以校园服务平台为研究对象&#xff0c;首先分析了当前校园服务平台的研究现状&#xff0c;阐述了本系统设计的意义和背景&#xff0c;运用微信小程序开发工具和云开发技术&#xff0c;研究和设计了一个校园服务平台&#xff0c;以满足学生在校园生活中的多样化需求。通过引…

最优算法100例之13-输出第n个丑数

专栏主页:计算机专业基础知识总结(适用于期末复习考研刷题求职面试)系列文章https://blog.csdn.net/seeker1994/category_12585732.html 题目描述 把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当…

使用Hive对HDFS中数据查询的优点

目录 摘要一、Hive是什么二、HDFS是什么三、Hive与HDFS的关系四、什么是HiveQL五、什么是mapreduce六、Hive如何将查询转为mapreduce任务七、Hadoop生态系统中的高性能引擎八、使用Hadoop的优点 摘要 Hadoop生态系统中包含了多个关键组件&#xff0c;如Hive、HDFS、MapReduce等…

Typora:一款值得尝试的Markdown编辑器

引言&#xff1a; 随着博客的兴起&#xff0c;越来越多的人开始写博客。而Markdown作为一种轻量级标记语言&#xff0c;因其简洁、易读、易写、易转换等特点而被广泛使用。Markdown的语法简单易学&#xff0c;使用起来也比较方便。但是&#xff0c;为了更好地使用Markdown&…

3.滑行。

3.滑行 - 蓝桥云课 (lanqiao.cn) 问题描述 小蓝准备在一个空旷的场地里面滑行&#xff0c;这个场地的高度不一小蓝用一个n行m列的矩阵来表示场地&#xff0c;矩阵中的数值表示场地的高度 如果小蓝在某个位置&#xff0c;而他上、下、左、右中有一个位置的高度(严格)低于当前的高…

目标检测评价标准

主要借鉴&#xff1a;https://github.com/rafaelpadilla/Object-Detection-Metrics?tabreadme-ov-file 主要评价指标、术语&#xff1a; Intersection Over Union (IOU)&#xff1a;两个检测框交集面积与并集面积的比值 True Positive (TP)&#xff1a;IOU大于阈值的检测框…

Elasticsearch入门及常用命令和Spring中的常用操作

入门 官网 简介 一个分布式的、Restful风格的搜索引擎。支持对各种类型的数据的检索。搜索速度快&#xff0c;可以提供实时的搜索服务。便于水平扩展&#xff0c;每秒可以处理PB级海量数据。 常用术语 索引&#xff1a;与MySQL数据库中的Database相对应类型&#xff1a;与…

Unity中如何实现草的LOD

1&#xff09;Unity中如何实现草的LOD 2&#xff09;用Compute Shader处理图像数据后在安卓机上不能正常显示渲染纹理 3&#xff09;关于进游戏程序集加载的问题 4&#xff09;预制件编辑模式一直在触发自动保存 这是第379篇UWA技术知识分享的推送&#xff0c;精选了UWA社区的热…

pycharm修改主题颜色和注释颜色

目录 一、修改主题颜色 二、修改注释颜色 一、修改主题颜色 总结的来说就是&#xff1a;File-Settings-Appearance-Theme。 有三种主题&#xff1a; Darcula&#xff1a;默认主题&#xff0c;可以看作是黑的&#xff1a; IntelliJ Light:可以看作是白的&#xff1a; High con…

DeepFaceLive换脸小白教程,看这一篇就玩了

先官网下个软件DeepFaceLive - DeepfakeVFX.com 解压安装程序&#xff0c;准备安装&#xff0c; 解压&#xff0c;注意不要有中文路径&#xff01;

海外媒体发稿:如何选择适合自己的海外媒体推广发稿平台-华媒舍

在数字化时代&#xff0c;海外媒体推广成为企业扩大国际影响力的重要方式之一。海外媒体平台琳琅满目&#xff0c;如何选择适合自己的平台成为了一个需要深入理解和研究的问题。本文将以科普的方式介绍如何选择适合自己的海外媒体推广发稿平台。 1. 形象建立 要选择能够准确展…

SpringBoot 使用【AOP 切面+注解】实现在请求调用 Controller 方法前修改请求参数和在结果返回之前修改返回结果

前情提要 在项目中需要实现 在请求调用 Controller 方法前修改请求参数和在结果返回之前修改返回结果。 我们可以使用 AOP 切面注解的形式实现。这样我们就可以在不修改原始代码的情况下&#xff0c;通过切面类在方法调用前后插入额外的逻辑。 解决方案 自定义注解 PreProc…

vue3源码解析——ref和reactive定义响应式的区别

ref 和 reactive 是 Vue 3.0 中用于定义响应式数据的两个新 API。它们有以下区别&#xff1a; ref 定义单个响应式数据 数据类型可以是任意类型。它通常用于定义原始数据类型为响应式数据。返回一个响应式对象&#xff0c;该对象包含一个 .value 属性&#xff0c;可用于获取和设…

【全栈小5】我的创作纪念日

目录 前言机缘收获粉丝和原创个人成就六边形战士 回顾文章原代码代码优化 憧憬 前言 全栈小5 &#xff0c;有幸再次遇见你&#xff1a; 还记得 2019 年 03 月 29 日吗&#xff1f; 你撰写了第 1 篇技术博客&#xff1a; 《前端 - 仿动态效果 - 展开信息图标》 在这平凡的一天&…

SpringBoot -- Profiles

Profiles具备环境隔离能力&#xff0c;可以将我们的项目快速切换开发、测试、生产环境 我们的使用步骤也很简单&#xff1a; 1. 标识环境&#xff1a;指定哪些组件、配置在哪个环境生效 2. 切换环境&#xff1a;这个环境对应的所有组件和配置就应该生效 接下来就进行详细的…

蓝桥杯 付账问题

Problem: 蓝桥杯 付账问题 文章目录 思路解题方法复杂度Code 思路 这是一个关于付款问题的题目&#xff0c;我们需要找到一个最优的付款策略&#xff0c;使得每个人付款的金额尽可能接近平均值。我们可以通过排序和贪心的策略来解决这个问题。 解题方法 首先&#xff0c;我们将…

【JS】null和undefined有什么区别

前言 JS的作者Brendan Eich曾说过两者的区别&#xff1a; null means “no object”&#xff0c; undefined > “no value”.Really it’s an abstraction leak:null and objects shared a Mocha type tag. 翻译后&#xff1a; null 表示“没有对象”&#xff0c;undefined…

STM32学习笔记(9_3)- USART串口代码

无人问津也好&#xff0c;技不如人也罢&#xff0c;都应静下心来&#xff0c;去做该做的事。 最近在学STM32&#xff0c;所以也开贴记录一下主要内容&#xff0c;省的过目即忘。视频教程为江科大&#xff08;改名江协科技&#xff09;&#xff0c;网站jiangxiekeji.com 本期介…