Django开发笔记

news2024/10/5 7:01:43

Django开发笔记

  • Django学习
    • 1. Django安装
        • path()函数
    • 2. 创建项目
      • 2.1 终端命令创建
      • 2.2 pycharm创建项目
    • 3. App
    • 4. 创建页面
      • 4.1 再写一个页面
      • 4.2 模板---Templates
      • 4.3 静态文件
        • 4.3.1 创建static目录
        • 4.3.2 静态文件的引用
    • 5. 模板语法
      • 案例:伪联通新闻中心
    • 6. 请求和响应
      • 案例:伪用户登录
    • 7. 数据库操作
      • 7.1 安装第三方模块
      • 7.2 ORM
        • 7.2.1 自己创建数据库
        • 7.2.2 django连接数据库
        • 7.2.3 django操作数据库表
        • 7.2.4 django操作表中的数据
      • 案例:用户管理
        • 1. 展示用户列表
        • 2. 添加用户
        • 3. 删除用户

Django学习

Django 采用了 MVT 的软件设计模式,即模型(Model),视图(View)和模板(Template)。本质上和MVC模式一样。
请添加图片描述

1. Django安装

# 在安装好python的基础上使用pip安装
pip insatll django==3.2.13

# 查看Django版本
python -m django --version

# 

path()函数

django path()函数

path(route, view, kwargs=None, name=None)
  • route:字符串,表示URL规则,与之匹配的 URL 会执行对应的第二个参数 view
  • view: 用于执行与正则表达式匹配的 URL 请求
  • kwargs: 视图使用的字典类型的参数
  • name: 用来反向获取 URL

2. 创建项目

2.1 终端命令创建

打开终端—进入目录—执行命令

  • django-admin.exe
# 配置好环境变量
django-admin startproject project-name

2.2 pycharm创建项目

要求pycharm专业版

请添加图片描述

# 项目默认文件介绍
.mydjango
|-- mydjango
|   |-- __init__.py
|   |-- asgi.py		# 接受网络请求,不用修改
|   |-- settings.py	# 项目配置文件,比如数据库配置等
|   |-- urls.py		# URL和Python函数的对应关系
|   `-- wsgi.py		# 接受网络请求,不用修改
`-- manage.py		# 项目管理脚本,不用修改

3. App

# django的app思想,一般项目下创建一个app即可
- 项目
	-app 用户管理
    -app 订单管理
    -app 后台管理
    -app .....

请添加图片描述

4. 创建页面

  1. 确保app已注册【setting.py】

请添加图片描述

  1. 编写URL和视图函数的关系【urls.py】

请添加图片描述

  1. 编写视图函数【views.py】

请添加图片描述

  1. 启动django项目
# 命令行启动
python manage.py runserver

# pycharm启动
社区版本不支持

请添加图片描述

4.1 再写一个页面

请添加图片描述

4.2 模板—Templates

在每个app目录下,单独创建templates目录,用于放置HTML文件

若在根目录下创建templates目录,则要在setting.py文件中,配置模板的路径

请添加图片描述

请添加图片描述

# render函数
def function(request):
    render(request,"templates.html")

4.3 静态文件

一般把图片、css、js、plugins都当做静态文件处理

4.3.1 创建static目录

对于静态文件的管理,需要创建static目录

# 目录结构
-app
	-static
		-css
    	-img
    	-js
    	-plugins

4.3.2 静态文件的引用

请添加图片描述

5. 模板语法

本质上:在html文件中写一些占位符,最后由数据对这些占位符进行替换和处理

# if标签
{% if condition %}
     ... display
{% endif %}

# if/else标签
{% if condition1 %}
   ... display 1
{% elif condition2 %}
   ... display 2
{% else %}
   ... display 3
{% endif %}

# for标签
{% for item in n1 %}
    <div>{{item}}</div>
{% endfor %}

  • 浏览器最终拿到的是替换后的html文件

请添加图片描述

案例:伪联通新闻中心

# urls.py
	# 新闻中心链接
    path('news', views.news)

# views.py
	# 定义news函数
    def news(request):
    # 1.定义一些新闻(字典或者列表) 或 去数据库
    # 2. 网络请求爬联通的新闻数据
    # 向地址发送请求
    import requests
    res = requests.get("http://www.chinaunicom.com.cn/api/article/NewsByIndex/2/2022/11/news")
    data_list = res.json()
    print(data_list)
    return render(request, 'news.html',{"news_list":data_list})

# news.html
    <h1>联通新闻中心</h1>
    <ul>
        {% for items in news_list %}
            <li>{{items.news_title}} {{items.post_time}}</li>
        {% endfor %}
    </ul>

请添加图片描述

6. 请求和响应

请添加图片描述

案例:伪用户登录

  • {% csrf_token %} 标签:csrf 全称是 Cross Site Request Forgery,这是 Django 提供的防止伪装提交请求的功能,POST 方法提交的表格必须有此标签。

  • 没有就报错请添加图片描述

请添加图片描述

# urls.py
	# 用户登录
    path('login/', views.login)

# views.py
def login(request):
    if request.method == "GET":
        return render(request, "login.html")
    else:
        # 如果是POST请求,获取用户提交的数据
        print(request.POST)
        username = request.POST.get("user")
        password = request.POST.get("pwd")

        if username == 'root' and password == "123":
            #return HttpResponse("登录成功")
            return redirect('http://www.baidu.com')
        else:
            # return HttpResponse("登录失败")
            return render(request, "login.html", {"error_msg":"用户名或密码错误"})
# login.html
      <h1>用户登录</h1>
      <form method="post" action="/login/">
        {% csrf_token %}
        <input type="text" name="user" placeholder="用户名">
        <input type="password" name="pwd" placeholder="密码">
        <input type="submit" value="提交"/>
        <span style="color:red;">{{ error_msg }}</span>
      </form>

7. 数据库操作

  • django开发操作数据库更加简单,内部提供了ORM(对象关系映射)框架

请添加图片描述

7.1 安装第三方模块

pip install mysqlclient

7.2 ORM

ORM可以帮助我们做两件事情:

  1. 创建、修改、删除数据库表(不用写SQL语句),无法创建数据库
  2. 操作表中的数据(不用写SQL语句)

7.2.1 自己创建数据库

  1. 启动MySQL服务
  2. 创建数据库
create database mydjango DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

项目使用sqlite数据库,这里只是链接配置不同,其他数据库操作一致

7.2.2 django连接数据库

在setting.py文件中进行配置和修改

在这里插入图片描述

7.2.3 django操作数据库表

  • 创建表:在models.py文件编写代码

请添加图片描述

  • 执行命令
python manage.py makemigrations   # 告诉django我要更改数据库了
python manage.py migrate	# 更改数据库

请添加图片描述

注意事项:在表中新增列时,由于已存在列中可能已有数据,所以新增列必须要指定新增列对应的数据:

  • 按提示输入 1,选择手动输入一个值
  • 设置默认值
age = models.IntegerField(default=18)
  • 允许为空
data = models.IntegerField(null=True, blank=True)

以后开发中如果想要对表结构进行调整:

  • 在models.py文件中操作类即可
  • 然后执行命令
python manage.py makemigrations
python manage.py migrate

7.2.4 django操作表中的数据

def orm(request):
    from app01.models import UserInfo, Department
    # 1.新建数据
    UserInfo.objects.create(name='张启航', password='123',age=24)
    UserInfo.objects.create(name='黄轶飞', password='123',age=19)
    Department.objects.create(title='销售部')
    Department.objects.create(title='人事部')

    # 2.删除数据
    UserInfo.objects.filter(id=2).delete()
    Department.objects.all().delete()

    # 3.获取数据
    # 3.1获取符合条件的所有数据,返回QuerySet对象
    data_list = UserInfo.objects.all()  # QuerySet对象
    for obj in data_list:
        print(obj.id, obj.name,obj.password,obj.age)
    # 3.2获取第一条数据,返回对象
    UserInfo.objects.filter(id=1).first()

    # 4.更新数据
    UserInfo.object.all().updata(password='999')
    UserInfo.object.all().filter(id=2).updata(password='999')
    UserInfo.object.all().filter(name="张启航").updata(password='999')
    
    return HttpResponse('操作成功')

案例:用户管理

1. 展示用户列表

  • url
  • 函数
    • 获取用户所有信息
    • HTML渲染

请添加图片描述

2. 添加用户

  • url
  • 函数
    • GET,看到页面,输入内容
    • POST,提交–>写入到数据库

请添加图片描述

3. 删除用户

  • url
  • 函数
http://127.0.0.1:8000/info/delete/?nid=1
http://127.0.0.1:8000/info/delete/?nid=2
http://127.0.0.1:8000/info/delete/?nid=3

def info_delete(request):
    nid = request.GET.get('nid')
    UserInfo.objects.filter(id=nid).delete()
    return HttpResponse("删除成功")

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

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

相关文章

KT148A语音芯片按键版本一对一触发播放常见的问题集锦FAQ_V4

1.1 有3个IO&#xff0c;都是一样的功能吗&#xff1f;从配置文件的说明来看&#xff0c;功能是键控发声&#xff0c;那么3个IO都只能是键控发声吗&#xff1f;还是可以有选择地某个IO对应播放那段语音&#xff1f;三个按键有什么区别&#xff1f;他们和语音号是如何对应的&…

[附源码]java毕业设计校园环境保护监督系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

SpringBoot SpringBoot 开发实用篇 5 整合第三方技术 5.7 memcached 下载与安装

SpringBoot 【黑马程序员SpringBoot2全套视频教程&#xff0c;springboot零基础到项目实战&#xff08;spring boot2完整版&#xff09;】 SpringBoot 开发实用篇 文章目录SpringBootSpringBoot 开发实用篇5 整合第三方技术5.7 memcached 下载与安装5.7.1 memcached 下载5.7.…

基于Web的个人网页响应式页面设计与实现 HTML+CSS+JavaScript(web前端网页制作课作业)

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

裁员潮血洗硅谷,推特、Meta、亚麻都扛不住了!

据纽约时报14日报道&#xff0c;亚马逊计划最早于本周开启大规模裁员&#xff0c;上万名员工将被波及&#xff0c;Alexa、零售和人力部门将是重灾区。 在亚马逊员工人人自危的情况下&#xff0c;新的噩梦才刚刚开始&#xff0c;因为&#xff0c;这不过是硅谷裁员潮的冰山一角……

36、Java——一个案例学会三层架构对数据表的增删改查

✅作者简介&#xff1a;热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏&#xff1a;Java案例分…

Spring Security(1)

您好&#xff0c;我是湘王&#xff0c;这是我的CSDN博客&#xff0c;欢迎您来&#xff0c;欢迎您再来&#xff5e; 虽然说互联网是一个非常开发、几乎没有边界的信息大海&#xff0c;但说起来有点奇怪的是&#xff0c;每个稍微有点规模的互联网应用都有自己的权限系统&#xff…

BSV 上的 PLONK

我们很自豪地宣布 BSV 现在支持 PLONK。关于 PLONK 工作原理的详细说明&#xff0c;可以参考我们之前的解释 第一部分 和 第二部分。 我们之前已经实现了 Groth16&#xff0c;这是最小且最高效的 SNARK 构造。但是&#xff0c;它需要为每个电路进行可信设置。通过消除对每条电…

算法工程师应该熟知的C++高级用法

1. lambda表达式&#xff08;C11&#xff09; 1.1 lambda表达式的组成 []/*1*/ ()/*2*/ mutable/*3*/ throw()/*4*/ -> int/*5*/ {}/*6*/capture子句参数列表(optional)可变规范(optional)异常定义(optional)返回类型(optional)函数体 1.2 即看即用 语法&#xff1a; […

我现在是如何听歌的?

个人听歌需求 首先讲下个人听歌的情况&#xff0c;再讲讲我是怎么解决自己的听歌需求的&#xff0c;不一定适合所有人&#xff0c;但多少有点启发。我个人听歌的特殊需求其实还蛮多的。 比如&#xff1a; 突然会想单曲循环一首歌&#xff0c;直到耳朵说够了。 喜欢组装各种歌…

小啊呜产品读书笔记001:《邱岳的产品手记-06》第13讲 无用却必要:产品规划【上】 第14讲 留白与节奏:产品规划【下】

小啊呜产品读书笔记001&#xff1a;《邱岳的产品手记-06》第13讲 无用却必要&#xff1a;产品规划【上】 & 第14讲 留白与节奏&#xff1a;产品规划【下】一、今日阅读计划二、泛读&知识摘录1、第13讲 无用却必要&#xff1a;产品规划【上】2、第14讲 留白与节奏&#…

数据中心网络是什么?如何管理数据中心网络

什么是数据中心网络 数据中心网络是提供网络、存储和计算资源&#xff0c;为企业/企业数据中心租户执行广泛的工作负载。这些工作负载需要不同的硬件或高端网络组件来计算、存储、检索和传输来自本地和广域网的工作负载中的数据。 数据中心网络的核心支柱 在数据中心网络架构…

【第四部分 | JavaScript 基础】2:运算、控制流程、数组

目录 | 运算符 概述 浮点数有精度误差 自增和自减 比较运算符 逻辑运算符 赋值运算符 运算优先级 | 流程控制 条件判断 if、if...else 三元表达式 分支语句 switch | 循环 | 断点调试 | 数组 创建数组 访问与遍历 获取数组长度 JavaScript的数组 和 Java 的区…

LabVIEW项目中实时目标出现黄色感叹号

LabVIEW项目中实时目标出现黄色感叹号 当打开一个包含实时目标的LabVIEW项目&#xff08;如CompactRIO&#xff08;cRIO&#xff09;、CompactDAQ&#xff08;cDAQ&#xff09;或实时PXI&#xff09;时&#xff0c;在目标旁边看到一个黄色感叹号。单击目标时&#xff0c;收到以…

目标检测论文解读复现之十四:一种基于残差网络优化的航拍小目标检测算法

前言 此前出了目标改进算法专栏&#xff0c;但是对于应用于什么场景&#xff0c;需要什么改进方法对应与自己的应用场景有效果&#xff0c;并且多少改进点能发什么水平的文章&#xff0c;为解决大家的困惑&#xff0c;此系列文章旨在给大家解读最新目标检测算法论文&#xff0…

代码随想录算法训练营第六天|字符串 栈 队列

字符串 字符串是我的弱点&#xff0c;主要是函数用的不是很熟练 注意因为字符串是左闭右开区间&#xff0c;而且字符串末尾还有一个"/0"&#xff0c;所以我们在reverse的时候是 [s.begin(),s.begin() len] 其中len是string的长度&#xff0c;假如string的长度是6…

[Nacos][Rancher][微服务] 容器化Docker部署的Nacos拒接连接

问题 2022-11-21 16:16:37.836 |-ERROR [main] com.alibaba.nacos.client.naming [552] -| request: /nacos/v1/ns/instance failed, servers: [localhost:8848], code: 500, msg: Connection refused (Connection refused) 2022-11-21 16:16:37.837 |-ERROR [main] com.ali…

Move 学习记录

Move在线IDE Move Playground 基本数据类型 只包括 无符号整型、布尔型、地址 3种类型&#xff0c;没有像其它语言中有字符串类型。 数据类型数据类型表示符号无符号整型u8, u64, u128布尔类型bool地址类型address&#xff0c; ex: Std, 0x1, Sender 变量定义&#xff08;4…

应急响应-文件痕迹排查

文件痕迹排查文件痕迹排查Windows文件痕迹排查敏感目录时间点文件排查Linux文件痕迹排查敏感目录时间点排查特殊文件文件痕迹排查 在应急响应排查的过程中&#xff0c;由于大部分的恶意软件、木马、后门等都会在文件维度上留下痕迹&#xff0c;因此对文件痕迹的排查必不可少。…

【数据挖掘】关联规则挖掘

关联规则挖掘 一、基本概念 概念 关联规则挖掘(Association rules mining) 在数据集中找到各项数据之间的关联关系。 项目(Item) IDItems bought10A,B,D20A,C,D30A,D,E 支持度(support) 项集{x,y}\{x,y\}{x,y}在总项集中出现的概率(x,yx,yx,y同时出现) Support(x→y)P(x,…