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,一经查实,立即删除!

相关文章

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

本文以校园服务平台为研究对象&#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当…

目标检测评价标准

主要借鉴&#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. 形象建立 要选择能够准确展…

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

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

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

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

【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 本期介…

Memcached 教程之Memcached介绍(一)

Memcached 教程 Memcached是一个自由开源的&#xff0c;高性能&#xff0c;分布式内存对象缓存系统。 Memcached是以LiveJournal旗下Danga Interactive公司的Brad Fitzpatric为首开发的一款软件。现在已成为mixi、hatena、Facebook、Vox、LiveJournal等众多服务中提高Web应用…

POSIX信号量

1.快速认识信号量接口 POSIX信号量和SystemV信号量作用相同&#xff0c;都是用于同步操作&#xff0c;达到无冲突的访问共享资源目的。 但POSIX可以用于线程间同步。我们之前认识SystemV信号量时有这样三个结论&#xff1a; 1.信号量的本质是一把计数器 2.申请信号量本质就是预…

进程调度算法

进程调度算法 进程调度算法先来先服务调度基于优先级调度&#xff08;Priority Scheduling&#xff09;短进程优先 / 最短剩余时间优先轮转法&#xff08;Round-Robin Scheduling&#xff09;高响应比优先调度算法&#xff08;Highest Response Ratio Next&#xff09;多级反馈…

jupyter 设置工作目录

本博客主要介绍&#xff1a; 如何为jupyter设置工作目录 1.打开 anaconda prompt , 执行 jupyter notebook --generate-config 执行这个命令后会生成一个配置文件 2. 打开jupyter_notebook_config.py文件编辑 搜索notebook_dir&#xff0c;把这行代码的注释取消&#xff0c;…

stm32再实现感应开关盖垃圾桶

一、项目需求 检测靠近时&#xff0c;垃圾桶自动开盖并伴随滴一声&#xff0c;2秒后关盖 发生震动时&#xff0c;垃圾桶自动开盖并伴随滴一声&#xff0c;2秒后关盖 按下按键时&#xff0c;垃圾桶自动开盖并伴随滴一声&#xff0c;2秒后关盖 硬件清单 SG90 舵机&#xff0c;…

HTTP 与 HTTPS 的区别

基本概念 HTTP&#xff08;HyperText Transfer Protocol&#xff1a;超文本传输协议&#xff09;是一种应用层协议&#xff0c;主要用于在网络上进行信息的传递&#xff0c;特别是用于Web浏览器和服务器之间的通信。 它使用明文方式发送数据&#xff0c;这意味着传输的内容可…

公司服务器被.rmallox攻击了如何挽救数据?

公司服务器被.rmallox攻击了如何挽救数据&#xff1f; .rmallox这种病毒与之前的勒索病毒变种有何不同&#xff1f;它有哪些新的特点或功能&#xff1f; .rmallox勒索病毒与之前的勒索病毒变种相比&#xff0c;具有一些新的特点和功能。这种病毒主要利用加密技术来威胁用户&am…

【JavaScript】数组 ③ ( JavaScript 数组长度 | 修改数组长度 | 数组案例 )

文章目录 一、JavaScript 数组长度1、数组长度2、修改数组长度 二、数组案例1、求数组元素平均值2、求数组元素最大值 一、JavaScript 数组长度 1、数组长度 在 JavaScript 中 , 数组长度 可以通过 数组变量的 length 属性 获取 , 该属性 返回 数组中的元素数量 , 也就是 数组长…