01.Django入门
1.创建项目
1.1基于终端创建Django项目
- 打开终端
- 进入文件路径(打算将项目放在哪个目录,就进入哪个目录)
E:\learning\python\Django
- 执行命令创建项目
F:\Anaconda3\envs\pythonWeb\Scripts\django-admin.exe(Django-admin.exe所在路径) startproject 项目名称
如果所在环境的Scripts已经加入环境变量了,可以直接在终端写:
django-admin startproject 项目名称
eg:创建项目名为MySite的命令:
F:\Anaconda3\envs\pythonWeb\Scripts\django-admin.exe startproject MySite
1.2 基于Pycharm创建Django项目
1.新建项目,选择Django,选择项目所在位置和解释器,然后点击“创建”:
说明:
-
通过终端的命令行,创建的项目,是比较标准的
-
通过pycharm创建的项目,在么标准的基础上默认加了:
-
创建了一个templates目录【删除】
-
Pycaharm在setting.py中的TEMPLATES配置项中添加了如右图所示部分(Pycharm加这个的意思是:找模板就去外层的templates目录找)【删除】
-
2.默认项目结构介绍
MySite
├─MySite
│ └─asgi.py 【异步式的接收网络请求】【默认不动】
│ └─wsgi.py【同步式的接收网络请求】【默认不动】
│ └─settings.py 【项目的配置文件:链接数据库,注册APP】【经常修改的文件】
│ └─urls.py 【URL和函数的对应关系】【经常修改的文件】
│ └─__init__.py
└─manage.py 【项目的管理:启动项目、创建app、数据管理】【默认不动,经常使用】
注意:
使用tree命令显示不完全的原因: tree /f
3.APP
总项目
- app,用户管理【独立的表结构、函数、HTML母版、CSS】
- app,订单管理 【独立的表结构、函数、HTML母版、CSS】
- app,后台管理 【独立的表结构、函数、HTML母版、CSS】
- app,API 【独立的表结构、函数、HTML母版、CSS】
注意:
我们在起初刚开始的时候,项目简单,开发简洁,用不到多APP,一般情况下只创建1个APP即可
3.1 APP 的创建
打开Command Prompt终端,在终端输入:
python maneage.py startapp app名
E:.
│ manage.py
│
├─app01
│ │ admin.py 【默认不用动,Django默认提供了admin后台管理】
│ │ apps.py 【默认不用动,app的启动类】
│ │ models.py 【重要,对数据库进行操作的】
│ │ tests.py【默认不动。用来做单元测试的】
│ │ views.py 【重要,定义url对应的视图函数】
│ │ __init__.py
│ │
│ └─migrations 【默认不用动,它是Django的module对数据库字段进行修改的时候,用来做记录的】
│ __init__.py
│
└─MySite│ asgi.py│ settings.py│ urls.py│ wsgi.py│ __init__.py│└─__pycache__settings.cpython-39.pyc__init__.cpython-39.pyc
4.Django快速上手
4.1打通基础数据流
注意:
在运行Django程序之前,确保APP已注册
步骤:
1.在app01中的apps.py中找到App01Config,然后在settings.py
中的INSTALLED_APPS项写入:‘app01.apps.App01Config’
INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','app01.apps.App01Config'#注册APP01
]
2.在urls.py
中编写URL和视图函数对应关系
在MySite中的urls.py
中先引入app01中的views.py
中视图函数,再将函数和URL对应声明
- 在
views.py
中编写视图函数:
-
启动Django项目:
-
通过命令行启动:
python manage.py runserver
-
Pycharm启动:可以编辑配置之后,点击播放按钮启动
-
这样项目基本数据流向就跑通了
4.2 templates 模板
注意:
- 优先去项目根目录的template中寻找【要提前在
settings.py
中配置DIRS
】 - 如果哦没找到,再根据app的注册顺序,在每个app下的templates目录去找
4.2.1 Django模板语法
(1)本质:在HTML中写一些占位符,由数据对占位符进行替换和处理。模板语法的原理如下图所示:
注意:
整个过程render 的内部:
1.读取含有模板语法的HTML文件
2.内部进行渲染(模板语法执行并替换数据),最终只得到含有HTML标签的字符串
3.将渲染(替换)完成的字符串返回给用户浏览器
(2)模板语法演示:
views.py
中对应的处理函数部分:
def usetemp(request):# 变量name = '小明'# 列表arr = ['小红', '小兰', '小白']# 字典dic = {'name': '小明', 'age': 18, 'address': '北京'}# 列表套字典lic = [{'name': '小兰', 'age': 18, 'address': '上海'},{'name': '小红', 'age': 18, 'address': '天津'},{'name': '小白', 'age': 18, 'address': '广东'}]return render(request, 'usetemp.html',{'name': name,'friends': arr,'userinfo': dic,'friends_info': lic})
带有模板语法的usetemp.html
代码:
<body>
<h1>变量</h1>
<span>{{ name }}</span>
<h1>数组</h1>
<ul><li>{{ friends.0 }}</li><li>{{ friends.1 }}</li><li>{{ friends.2 }}</li>
</ul>
<ul>{% for item in friends %}<li>{{ item }}</li>{% endfor %}
</ul>
<h1>字典</h1>
<span>{{ userinfo.name }}</span>
<span>{{ userinfo.age }}</span>
<span>{{ userinfo.address }}</span>
<span>遍历字典索引</span>
<ul>{% for index in userinfo.keys %}<li> {{ index }}</li>{% endfor %}</ul>
<span> 遍历字典值</span>
<ul>{% for value in userinfo.values %}<li>{{ value }}</li>{% endfor %}</ul>
<span>循环字典的每一项</span>
<ul>{% for key,value in userinfo.items %}<li>{{ key }} = {{ value }}</li>{% endfor %}</ul>
<span>{{ friends_info.0 }}</span>
<br/>
<span>{{ friends_info.0.name }}</span>
<h1>条件语句</h1>
{% for item in friends_info %}{% if item.name == '小芳' %}<span> 小芳:{{ item.age }}</span>{% elif item.name == '小红'%}<span>小红年龄:{{ item.age }}</span>{% else %}<span> 没有符合条件的用户</span>{% endif %}
{% endfor %}</body>
4.3 静态文件
在开发过程中一般将:
- 图片
- CSS
- JS
都会被当做静态文件处理。
静态文件在Django项目中,步骤:
- 先在app的目录下创建static 文件夹,如static/img,js,css,plugins
2.在Django中所有静态资源的引入:
{% load static %}
使用的路径写法:{% static 'img/1.jpeg' %}
5.请求和响应
常见的请求和响应
request是一个对象,封装了用户发过来的所有数据
# 1.获取请求方式get/POSTprint(request.method)# 2.获取咋URL上传递的参数值,print(request.GET['a'])# 3.post请求会在请求体中传递数据print(request.POST)# 4.【响应】HttpResponse("OK"):将字符串的内容返回给请求者# return HttpResponse('OK')# 5.【响应】render:读取HTML文件的内容,再进行渲染(替换),生成新的字符串,返回给用户的浏览器# return render(request, 'req.html')# 6.【响应】redirect:强制浏览器重定向return redirect('https://www.baidu.com')
注:
在使用表单提交数据时,会触发Django的安全机制,只需要在form标签开头加入:{% csrf_token %}
<form method="POST" action="login">{% csrf_token %}
</form>
6.数据库操作
MySql+pymysql
import pymysql
#1.连接MysQL
conn = pymysql.connect(host="127.0.0.1",port=3306,user='root',passwd="root123", charset='utf8', db=' unicom ' )
cursor = conn.cursor (cursor=pymysql.cursors.Dictcursor)
#2.发送指令
cursor.execute( "insert into admin(username , password,mobile)values('wupeiqi' , 'qwe123','15155555555')")
conn.commit( )
#3.关闭
cursor.close( )
conn.close()
在Django中一般不直接通过pymysql操作MySQL,太繁琐了。Django为我们提供了ORM框架
6.1 安装ORM要用的第三方模块
pip install mysqlclient
6.2 ORM
ORM 的作用:
- 创建和增删改查数据库中的表(不用写SQL语句)【注意:无法创建数据库】
- 操作表中的数据
ORM连接MySQL的步骤:
- 创建数据库,启动MySQL,创建数据库
CREATE DATABASE CHARACTER SET utf8;
- 在settings.py中进行配置和修改
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'XXX', # 数据库名字'USER': 'root','PASSWORD': 'XXX','HOST': '127.0.0.1', # 要连接哪台机器上的MySQL'PORT': '3306' # 端口号}
}
6.3. 基于Django去操作表:
6.3.1 创建表
1.在app下的models.py中编辑:
from django.db import modelsclass UserInfo(models):name = models.CharField(max_length=32)password = models.CharField(max_length=64)age = models.IntegerField()
2.在终端运行命令:
python manage.py makemigrations
python manage.py migrate
注意:在运行命令之前,确保APP已经提前注册
6.3.2 修改表
在表中新增列时,由于已经存在的列中可能已有数据, 所以新增列必须要指定新增列对应的数据:
- 选择:1,那么就手动输入值
- 选择:2,那么放弃新增列(应该在新增列中设置默认值)
# 设置默认值
address = models.CharField(default='XXX街道XXX号')
# 允许为空
data = models.IntegerField(null=True, blank=True)
注意:
以后在开发中如果想要对表结构进行调整:
- 在models.py文件中操作类即可
- 数据库迁移命令:
python manage.py makemigrations
python manage.py migrate
6.3.3对表字段的增删改查
# 1.新建数据
# models.Department.objects.create(title='活动', segment='销售部')
# models.UserInfo.objects.create(name='xijing', password='123456', age=18)# 2.删除数据
# 删掉UserInfo里面id=2的记录
# models.UserInfo.objects.filter(id=2).delete()
# 删掉Departemt里面的所有记录
# models.Department.objects.all().delete()# 3.查数据
#queryset = models.UserInfo.objects.all()
# 得到的是一个列表
# for item in queryset:
# print(item.name,item.age,item.password)
# 获取id=5的数据
# row_data = models.UserInfo.objects.filter(id=5).first()
# print(row_data)# 4.更新数据
# 将UserInfo表里面所有数据的密码字段全都更新成999
# models.UserInfo.objects.all().update(password='9999')
# 筛选条件
models.UserInfo.objects.filter(id=5).update(password='123456')
7.案列展示流程
7.1展示用户列表
- url
- 函数
- 获取所有用户信息
- HTML渲染
7.2添加用户信息
- url
- 函数
- GET,看到页面,输入内容
- POST,提交写入数据库
7.3删除用户
- url
- 函数
- http://127.0.0.1:8000/info/delet?id=5
- def handlefunc(request):
id = request.GET.get(‘id’)
module.UserInfo.obejects.filter(id=5).delete()
ects.all().update(password=‘9999’)
相关文章:
01.Django入门
1.创建项目 1.1基于终端创建Django项目 打开终端进入文件路径(打算将项目放在哪个目录,就进入哪个目录) E:\learning\python\Django 执行命令创建项目 F:\Anaconda3\envs\pythonWeb\Scripts\django-admin.exe(Django-admin.exe所…...
亿赛通电子文档安全管理系统任意文件上传漏洞(2023-HW)
亿赛通电子文档安全管理系统任意文件上传漏洞 一、 产品简介二、 漏洞概述三、 影响范围四、 复现环境五、 漏洞复现小龙POC检测 免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果…...
docker限制容器日志大小
文章目录 业务场景问题排查彻底解决 业务场景 我们公司做交通相关业务,我们部门主要负责信控服务,卖信号机的硬件产品和配套的信控平台 由于有部分小项目,可能只有几十个路口,客户预算有限,只给我们老旧的Windows ser…...
底层驱动实现数码管显示温湿度数值功能
开发板:STM32MP157A 温湿度传感器:si7006 显示器(数码管):m74hc595 遇到的问题:循环采集温湿度传感器数值,并将数值发送给数码管的时候两者存在竞态关系,导致数码管显示亮度很暗 …...
03架构管理之测试管理
专栏说明:针对于企业的架构管理岗位,分享架构管理岗位的职责,工作内容,指导架构师如何完成架构管理工作,完成架构师到架构管理者的转变。计划以10篇博客阐述清楚架构管理工作,专栏名称:架构管理…...
30、devtools 依赖关于自动重启(自动加载页面)的知识
devtools 依赖关于自动重启的知识 ★ 自动重启 devtools会监控类加载路径中的文件(尤其是*.class文件),只要这些文件发生了改变, devtools就会自动重启Spring Boot应用。▲ 不同工具触发自动重启的方式:Eclipse&…...
ES6 Promise/Async/Await使用
Promise应用 在工作中, 我们经常会遇到用异步请求数据, 查询一个结果, 然后把返回的参数放入到下一个执行的异步函数像这样: $.ajax({..., success(resp)>{$.ajax({..., resp.id, success(resp)>{$.ajax({..., resp.name success(resp)>{//多层嵌套的情况, 看着是不…...
Word中对象方法(Methods)的理解及示例(上)
【分享成果,随喜正能量】奋斗没有终点,任何时候都是一个起点,沉潜是为了蓄势待发,沉潜是为了等待因缘。鲸豚沉潜于大海,幽兰深藏于山谷,能够经得起沉潜的人,才会有更高的成就。正如一年的树木只能当柴烧&am…...
AutoDev 1.1.3 登场,个性化 AI 辅助:私有化大模型、自主设计 prompt、定义独特规则...
在过去的半个月里,我们为开源辅助编程工具 AutoDev 添加了更强大的自定义能力,现在你可以: 使用自己部署的开源大模型自己配置 Intellij IDEA 中的行为自定义开发过程中的规范 当然了,如果您自身拥有开发能力的话,建议…...
win11 python 调用edge调试过程
1、下载对应版本的驱动程序: https://developer.microsoft.com/zh-cn/microsoft-edge/tools/webdriver/ 2、和系统版本对应的exe文件(x86、x64要对应)放置的固定的目录,我放到了system32下了; 3、PATH路径添加windows/system32目录&#x…...
DS-排序回顾
快速排序相比于堆排序的优点有: 效率更高:快速排序的平均时间复杂度为 O(nlogn),而堆排序的时间复杂度为 O(nlogn)。虽然它们的时间复杂度相同,但是在实际情况下,快速排序往往比堆排序更快,因为快速排序具有…...
clion软件ide的安装和环境配置@ubuntu
1.官网: Download CLion 2.安装Clion 直接在官网下载并安装即可,过程很简单 https://www.jetbrains.com/clion/ https://www.jetbrains.com/clion/download/#sectionlinux 3.激活码 4.配置Clion 安装gcc、g、make Ubuntu中用到的编译工具是gcc©…...
Cpp学习——类与对象3
目录 一,初始化列表 1.初始化列表的使用 2.初始化列表的特点 3.必须要使用初始化列表的场景 二,单参数构造函数的隐式类型转换 1.内置类型的隐式类型转换 2. 自定义类型的隐式类型转换 3.多参数构造函数的隐式类型转换 4.当你不想要发生隐式类型转换…...
回归预测 | MATLAB实现PSO-RBF粒子群优化算法优化径向基函数神经网络多输入单输出回归预测(多指标,多图)
回归预测 | MATLAB实现PSO-RBF粒子群优化算法优化径向基函数神经网络多输入单输出回归预测(多指标,多图) 目录 回归预测 | MATLAB实现PSO-RBF粒子群优化算法优化径向基函数神经网络多输入单输出回归预测(多指标,多图&a…...
ahooks.js:一款强大的React Hooks库及其API使用教程(四)
一、ahooks.js简介二、ahooks.js安装三、继续ahooks.js API的介绍与使用教程51. useResetState52. useUpdateLayoutEffect53. useDeepCompareLayoutEffect54. useRafInterval55. useRafTimeout56. useTimeout57. useLockFn58. useDocumentVisibility59. useDrop60. useDrag 一、…...
FOSSASIA Summit 2023 - 开源亚洲行
作者 Ted 致歉:本来这篇博客早就该发出,但是由于前几个月频繁差旅导致精神不佳,再加上后续我又参加了 Linux 基金会 7/27 在瑞士日内瓦举办的 Open Source Congress,以及 7/29-30 台北的 COSCUP23,干脆三篇连发&#x…...
QT 基本对话框
包括: 1.标准文件对话框 dialog.h #ifndef DIALOG_H #define DIALOG_H#include <QDialog> #include <QTextCodec> #include <QLabel> #include <QLineEdit> #include <QPushButton> #include <QGridLayout> #include <QFr…...
8th参考文献:[8]许少辉.乡村振兴战略下传统村落文化旅游设计[M]北京:中国建筑出版传媒,2022.
8th参考文献:[8]许少辉.乡村振兴战略下传统村落文化旅游设计[M]北京:中国建筑出版传媒,2022&…...
Azure静态网站托管
什么是静态网站托管 Azure Blob的静态网站托管是一项功能,它允许开发人员在Azure Blob存储中托管和发布静态网站。通过这个功能,您可以轻松地将静态网页、图像、视频和其他网站资源存储在Azure Blob中,并直接通过提供的URL访问这些资源。 官…...
LeetCode 热题 100(五):54. 螺旋矩阵、234. 回文链表、21. 合并两个有序链表
题目一: 54. 螺旋矩阵https://leetcode.cn/problems/spiral-matrix/ 题目要求: 思路:一定要先找好边界。如下图 ,上边界是1234,右边界是8、12,下边界是9、10、11,左边界是5,所以可…...
常用消息中间件介绍
RocketMQ 阿里开源,阿里参照kafka设计的,Java实现 能够保证严格的消息顺序 提供针对消息的过滤功能 提供丰富的消息拉取模式 高效的订阅者水平扩展能力 实时的消息订阅机制 亿级消息堆积能力 RabbitMQ Erlang实现,非常重量级,更适…...
装饰器读取不到被装饰函数的参数-已解决
def write_case_log(func):def wrapper(*args, **kwargs):logger.info("{}开始执行".format(func.__name__))func(*args,**kwargs)logger.info("{}执行中".format(args))logger.info("{}执行结束",format(func.__name__))return wrapper被装饰函…...
python爬虫爬取中关村在线电脑以及参数数据
一. 内容简介 python爬虫爬取中关村在线电脑以及参数数据 二. 软件环境 2.1vsCode 2.2Anaconda version: conda 22.9.0 三.主要流程 3.1 代码 解析都在代码里面 # 接口分析 # 原始接口,后面几个数字就是占位的,每个位置代表着不同的标签 # http…...
chatGPT-对话爱因斯坦
引言 阿尔伯特爱因斯坦( 1879年 3 月 14 日 – 1955 年 4 月 18 日)是一位出生于德国的理论物理学家,被广泛认为成为有史以来最伟大、最有影响力的科学家之一。他以发展相对论而闻名,他还对量子力学做出了重要贡献,因…...
嵌入式软件开发中的数据类型转换
在嵌入式软件开发时,数据的显示必不可少,那么必定会涉及到数据类型转换。将不同类型的数据在编程中进行转换,以便满足不同的需求。 插入一个知识点: 在C语言中,字符串是由字符组成的字符数组,以null终止符…...
The Go Blog 01:反射的法则(译文)
反思的法则 罗伯-派克 2011 年 9 月 6 日 引言 计算机中的反射是指程序检查自身结构的能力,尤其是通过类型检查自身结构的能力;它是元编程的一种形式。它也是造成混乱的一个重要原因。 在本文中,我们试图通过解释 Go 中的反射是如何工作的…...
Visual Studio Code前端开发插件推荐
引言 Visual Studio Code(简称VS Code)是一款轻量级且强大的开源代码编辑器,广受前端开发者的喜爱。其丰富的插件生态系统为前端开发提供了许多便利和增强功能的插件。本篇博客将向大家推荐一些在前端开发中常用且优秀的插件,并提…...
jps(JVM Process Status Tool):虚拟机进程状况工具
jps(JVM Process Status Tool):虚拟机进程状况工具 列出正在运行的虚拟机进程,并显示虚拟机执行主类名称(Main Class,main()函数所在的类)以及这些进程的本地虚拟机唯一ID(LVMID&am…...
初阶c语言:实战项目三子棋
前言 大家已经和博主学习有一段时间了,今天讲一个有趣的实战项目——三子棋 目录 前言 制作菜单 构建游戏选择框架 实现游戏功能 模块化编程 初始化棋盘 打印棋盘 玩家下棋 电脑下棋 时间戳:推荐一篇 C语言生成随机数的方法_c语言随机数_杯浅…...
计网第三章(数据链路层)(三)
一、点对点协议PPP 在第一篇里有提到数据链路层的信道分为两种:点对点信道和广播信道。 PPP协议就属于点对点信道上的协议。 如果对前面数据链路层的三个基本问题了解的比较透彻,那么这一块很多东西都很好理解。 从考试的角度来讲,PPP协议…...
海口网站建设哪家专业/百度百家号登录入口
有时需要在代码中对文件或者文件夹 进行删除,或者添加 导入的包:import os,shutil 主要涉及到三个函数 1、os.path.exists(path) 判断一个目录是否存在 2、os.makedirs(path) 多层创建目录 3、os.mkdir(path) 创建目录 1 新建文件夹2 import os,shutil3 …...
水泵行业网站怎么做/宁波网络推广方法
Long.parseLong(String)方法,将 string 参数解析为有符号十进制 ,返回一个long的result基本类型值 Long.ValueOf(String) ,方法得到的值非常相似。只是最后被转换为一个Long的包装类。...
制作网站需要的服务器/长春seo排名优化
以前在学校学习C语言的时候一直搞不懂那个共用体union有什么用的。工作之后才发现它的一些妙用,现举例如下:1. 为了方便看懂代码。比如说想写一个3 * 3的矩阵,可以这样写:[ 注:下面用红色部分标记的地方是后来添加上去…...
企业网上推广方式/西安seo霸屏
LeetCode 456. 132模式 难度 中等 给定一个整数序列:a1, a2, …, an,一个132模式的子序列ai, aj, ak被定义为:当i < j < k时,ai < ak < aj。设计一个算法,当给定有n个数字的序列时,验证这个…...
开发网是什么意思/优化设计数学
轮询轮询方式是Nginx负载默认的方式,顾名思义,所有请求都按照时间顺序分配到不同的服务上,如果服务Down掉,可以自动剔除,如下配置后轮训10001服务和10002服务。upstream dalaoyang-server {server localhost:10001…...
西安php网站建设专家/sem是什么意思职业
Pandas库 Pandas库是一个专门用于数据分析的开源Python库,有Series(序列)和DataFrame(数据框)这两种数据结构。 1 Pandas简介 数据分析工作需要一个专门的库,它能够以最简单的方式提供数据处理、数据抽取…...