Django学习笔记

news2024/9/23 3:23:32

Django学习笔记

    • 初识Django
      • 安装Django
      • 创建Django项目
      • APP
      • 启动Django
      • 快速上手
        • 再写一个页面
        • templates模板
        • 静态文件
      • 模板语法
      • 请求和相应
        • 登录案例
      • 数据库操作
        • 安装第三方模块
        • ORM

  • Django官网 : https://docs.djangoproject.com/en/4.2/
  • Django中文文档参考网站:https://yiyibooks.cn/

初识Django

安装Django

pip install django

创建Django项目

Django中项目会有一些默认的文件和文件夹

  1. 在终端

    • 打开终端

    • 进入到某个目录(项目放在哪里)

    • 执行命令创建项目

      "D:\py3.10.11\Scripts\django-admin.exe" startproject 项目名称
      

      如果D:\py3.10.11\Scripts\django-admin.exe已加入系统环境变量。

      django-admin.exe startproject 项目名称
      
    • 最后目录里面就多出来创建的几个项目

  2. pycharm中创建Django项目

    image-20230702215656958

特殊说明

由于用pycharm创建的Django项目会多出一个templates文件夹,若用不到可以将其删除,同时删除settings.py文件中的DIRS内容,此为默认templates目录存放路径

默认文件介绍

mysite2
|--manage.py 						[项目的管理、启动项目、创建app、数据管理] [不要动]
|--mysite2
	|--__init__.py
	|--settings.py					[项目配置文件] [常常修改]
	|--urls.py						[URL和函数的对应关系] [常常修改]
	|--asgi.py						[接收网络请求] [不要动]
	|--wsgi.py						[接收网络请求] [不要动]

APP

在Django中,"app"是指一个可重用的组件,用于实现应用程序中的特定功能。Django的项目通常由多个应用组成,每个应用负责处理不同的功能模块,例如用户认证、博客功能、论坛等。应用的使用可以使得项目更加模块化、可维护性更高,方便团队协作和代码重用。

下面是关于Django中的app的一些重要信息:

  1. 创建app: 使用以下命令在Django项目中创建一个新的app:

    python manage.py startapp app_name
    

    这将在项目根目录下创建一个新的文件夹,其中包含了app的相关文件结构。
    除此之外,还可以在pycharm中点击Tools工具中的Run manage.py Task选项,让我们在输入的时候python manage.py可以不写,只写python manage.py后面的命令
    在这里插入图片描述

  2. app目录结构: 一个Django app的典型目录结构如下:

    markdownCopy codeapp_name/
    ├── migrations/
    ├── __init__.py
    ├── admin.py
    ├── apps.py
    ├── models.py
    ├── tests.py
    ├── views.py
    └── ...
    
    • migrations/: 存放与数据库迁移相关的文件,用于管理数据模型的变更。
    • __init__.py: 将app目录变为Python包。
    • admin.py: 注册数据模型,以便在Django管理后台进行管理。
    • apps.py: app的配置文件,固定的,不用动。
    • models.py: 定义数据模型。
    • tests.py: 编写测试用例。
    • views.py: 定义处理HTTP请求的视图函数。
  3. app的配置: 在项目的settings.py中,需要将app添加到INSTALLED_APPS列表中,以便Django知道哪些app被包含在项目中。

  4. URL配置: 每个app可以拥有自己的URL配置,通过在app目录下创建urls.py文件,并在项目的主URL配置中包含它。这样,每个app都可以处理自己的URL路由。

  5. 视图函数: 在app的views.py文件中,定义处理HTTP请求的视图函数。这些视图函数接收请求并返回HTTP响应,可以通过模板引擎渲染页面或返回JSON数据等。

  6. 数据模型: 在app的models.py文件中定义数据模型,这些模型描述了数据在数据库中的结构。Django会自动根据这些模型生成相应的数据库表,并提供了ORM(对象关系映射)来简化对数据库的操作。

  7. 后台管理: 在app的admin.py文件中,可以将定义的数据模型注册到Django的管理后台,方便进行管理和编辑数据。

总之,Django中的app是一种组织代码的方式,它允许你将应用程序划分为小的、可重用的部分,有助于更好地组织代码、提高可维护性,并使开发过程

启动Django

  • 确保app已注册

    找到apps.py,找到name参数

    image-20230702224838965

    最后在setting.py中的INSTALLED_APPS中最后一行添加一行信息

    image-20230702225051853

  • 编写url和视图函数的对应关系(urls.py)

    url和视图函数的对应关系

  • 编写视图函数

    image-20230702225958398

  • 启动Django项目

    • 命令行启动

      python manage.py runserver
      
    • pycharm启动

      1

    启动之后便可访问http://127.0.0.1:8000/index/

快速上手

再写一个页面

比如说要继续写页面可以先编辑view.py视图函数

from django.shortcuts import render, HttpResponse

# Create your views here.
def index(request):
    return HttpResponse("hello world")

def user_list(request):
    return HttpResponse("用户列表")

def user_add(request):
    return HttpResponse("添加用户")

然后在urls.py里面来指定访问路由

from django.contrib import admin
from django.urls import path

from app_test import views
urlpatterns = [
    # path('admin/', admin.site.urls),
    # www.xxx.com/index/ -> 函数
    path('index/', views.index),

    path('user/list/', views.user_list),

    path('user/add/', views.user_add),
]

然后运行就得到如下效果

image-20230703114507690

templates模板

示例:

编辑views.py

def user_list(request):
    # 1.优先去根目录的templates中寻找(提前先配置)【不配置无效】
    # 2.去app目录下的templates目录寻找user_list.html(根据app的注册顺序,逐一去他们的templates目录中找)
    return render(request, "user_list.html")

在templates文件夹中创建一个user_list.html文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>用户列表</h1>
</body>
</html>

然后运行即可访问http://127.0.0.1:8000/user/add/页面

静态文件

在开发过程中一般将:图片、CSS、JS 都会当静态文件处理

在app目录下创建static文件夹。

image-20211124103828667

引用静态文件

image-20211124103947169

模板语法

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

image-20211124113409740

模板语法示例如下:

urlpatterns = [
    path('tpl/', views.tpl),
]
def tpl(request):
    name = "jhon"
    roles = ["管理员", "CEO", "保安"]
    user_info = {"name":"lily", "salary":10000, 'role':'CEO'}

    data_list = [
        {"name": "lily", "salary": 10000, 'role': 'CEO'},
        {"name": "Joe", "salary": 10000, 'role': 'CEO'},
        {"name": "Lihua", "salary": 10000, 'role': 'CEO'},
    ]
    return render(request, "tpl.html", {"n1": name, "n2": roles, "n3":user_info, "n4":data_list})
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>模板语法的学习</h1>
    <div>{{ n1 }}</div>
    <div>{{ n2 }}</div>

    <div>{{ n2.0 }}</div>
    <div>{{ n2.1 }}</div>
    <div>{{ n2.2 }}</div>

    <div>
        {% for item in n2 %}
            <span>{{ item }}</span>
        {% endfor %}

    </div>
<hr>

    {{ n3 }}
    {{ n3.name }}
    {{ n3.salary }}
    {{ n3.role }}
<ul>
    {% for k, v in n3.items %}
        <li>{{ k }} = {{ v }}</li>
    {% endfor %}

</ul>
<hr>
{{ n4.1 }}
    <br>
{{ n4.1.name }}

<hr>
{% if n1 == "test" %}
    <h1>哒哒哒哒哒</h1>
{% else %}
    <h1>哈哈哈哈哈</h1>
{% endif %}
</body>
</html>

运行结果如下:

image-20230703163219251

请求和相应

image-20211124142250396

登录案例

image-20211124151119553

image-20211124151127364

image-20211124151135563

数据库操作

  • 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开发操作数据库更简单,内部提供了ORM框架。

    image-20211124151748712

安装第三方模块

pip install mysqlclient

ORM

ORM可以帮助我们:

  • 创建、修改和删除数据库中的表 (不用写SQL语句)。【无法创建数据库】
  • 操作表中的数据
  1. 自己创建数据库

  2. django链接数据库

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

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'django_test',  # 数据库名字
            'USER': 'root',
            'PASSWORD': 'root',
            'HOST': 'localhost',  # 那台机器安装了MySQL
            'PORT': 3306,
        }
    }
    

    image-20230704221633630

  3. django操作表

    创建表:在models.py文件中

    image-20211124154658774

    在终端中执行命令:

    python manage.py makemigrations
    python manage.py migrate
    

    注意:app需要提前注册。

    image-20230704222737786

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

    • 1,手动输入一个值。

    • 设置默认值

      age = models.IntegerField(default=2)
      
    • 允许为空

      data = models.IntegerField(null=True, blank=True)
      

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

    • 在models.py文件中操作类即可。

    • 命令

      python manage.py makemigrations
      python manage.py migrate
      
  4. 操作表中的数据

    
    # #### 1.新建 ####
    # 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")
    
    # #### 2.删除 ####
    # UserInfo.objects.filter(id=3).delete()
    # Department.objects.all().delete()
    
    # #### 3.获取数据 ####
    # 3.1 获取符合条件的所有数据
    # data_list = [对象,对象,对象]  QuerySet类型
    # data_list = UserInfo.objects.all()
    # for obj in data_list:
    #     print(obj.id, obj.name, obj.password, obj.age)
    
    # data_list = [对象,]
    # data_list = UserInfo.objects.filter(id=1)
    # print(data_list)
    # 3.1 获取第一条数据【对象】
    # row_obj = UserInfo.objects.filter(id=1).first()
    # print(row_obj.id, row_obj.name, row_obj.password, row_obj.age)
    
    
    # #### 4.更新数据 ####
    # UserInfo.objects.all().update(password=999)
    # UserInfo.objects.filter(id=2).update(age=999)
    # UserInfo.objects.filter(name="朱虎飞").update(age=999)
    

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

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

相关文章

java 并发 随笔7 ThreadLocal源码走读

0. 刚刚见了下老朋友&#xff0c;桌球撞起来的感觉很爽 可以看到 Thread 是内部是维护了局部变量的(thread-local-map) 1. 源码走读 很多的细节都在代码块中备注了 package java.lang;// 现在回来起来&#xff0c;很多经验不太丰富的人之所以在接触、学习java.lang.thread的…

初识定时任务

了解定时任务 我们在开发系统的时候&#xff0c;常常会遇到需要定时的去执行一些业务&#xff0c;例如&#xff1a;定时备份数据库、定时生成报告、定时发送通知、定时批处理等各种自动化操作。 那此时我们就需要通过使用定时任务来完成这些业务需求。并且在日常的开发中定时任…

【从删库到跑路】一文带你明白MySQL数据库的 事务 操作

&#x1f38a;专栏【MySQL】 &#x1f354;喜欢的诗句&#xff1a;更喜岷山千里雪 三军过后尽开颜。 &#x1f386;音乐分享【如愿】 大一同学小吉&#xff0c;欢迎并且感谢大家指出我的问题&#x1f970; 文章目录 &#x1f354;事务⭐简介⭐普通操作——不使用事务&#x1f3…

深入流行推荐引擎第一部分:推荐系统基础

深入流行推荐引擎第一部分&#xff1a;推荐系统基础 1. 推荐引擎及其类型什么是推荐引擎&#xff1f;基于内容的推荐&#xff08;Content-Based Recommendations&#xff09;协作推荐&#xff08;Collaborative Recommendations&#xff09;混合动力推荐&#xff08;Hybrid Rec…

【stability.ai】SDXL:改进高分辨率图像合成的潜在扩散模型

github&#xff1a;https://github.com/Stability-AI/stablediffusion 试用&#xff1a; https://clipdrop.co/stable-diffusion https://dreamstudio.ai/ 介绍 近年来&#xff0c;深度生成建模在自然语言、音频和视觉媒体等各个数据领域取得了巨大的突破。本文将重点关注视…

计算机网络 day4 IP地址的两部分-A、B、C、D、E五类IP地址-私有地址-子网掩码-DNA服务器-域名解析服务

目录 三创网络拓扑结构图&#xff1a; 普通家庭网络拓扑结构图&#xff1a;&#xff08;也可以直接使用 子母路由器 &#xff08;母&#xff1a;无线路由器&#xff09;&#xff08;子&#xff1a;信号放大器、中继器&#xff09;&#xff09; 网络层&#xff1a;&#xff0…

一篇文章让你搞懂指针笔试题(加深对指针的理解)

指针笔试题 笔试题1 #include<stdio.h> int main() {int a[5] { 1, 2, 3, 4, 5 };int* ptr (int*)(&a 1);printf("%d,%d", *(a 1), *(ptr - 1));//程序的结果是什么&#xff1f;return 0; }给定一个数组a&#xff0c;当我们取地址a的时候&#xff0c…

基于stm32单片机的智能门禁系统设计

一.硬件方案 基于stm32单片机的智能门禁系统设计的整体电路主要由采用STM32F103单片机&#xff0c;4*4矩阵按键电路&#xff0c;电子锁继电器驱动电路&#xff0c;开锁LED指示灯&#xff0c;LCD1602显示屏电路&#xff0c;蜂鸣器报警电路&#xff0c;RFID感应电路&#xff0c;…

如何查看 当前安装的vue版本

目录 1 实现 1 实现 要查看当前安装的 Vue 版本&#xff0c;可以使用以下方法&#xff1a; 在终端或命令提示符中运行以下命令&#xff1a; vue --version如果你使用的是 Vue CLI 创建的项目&#xff0c;可以在项目的根目录中找到 package.json 文件。在该文件中&#xff0c…

【CSS】悬浮动画

文章目录 效果展示代码实现 效果展示 代码实现 <!DOCTYPE html> <html><head><meta charset"utf-8" /><title>一颗不甘坠落的流星</title></head><style type"text/css">.bth {/* 添加背景颜色 */backgr…

2023-7-7-第十三式模板方法模式

&#x1f37f;*★,*:.☆(&#xffe3;▽&#xffe3;)/$:*.★* &#x1f37f; &#x1f4a5;&#x1f4a5;&#x1f4a5;欢迎来到&#x1f91e;汤姆&#x1f91e;的csdn博文&#x1f4a5;&#x1f4a5;&#x1f4a5; &#x1f49f;&#x1f49f;喜欢的朋友可以关注一下&#xf…

代码随想录算法训练营第60天/最后一天 | 84.柱状图中最大的矩形

今日任务 目录 84.柱状图中最大的矩形 - Hard 84.柱状图中最大的矩形 - Hard 题目链接&#xff1a;力扣-84. 柱状图中最大的矩形 给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#xff0c;且宽度为 1 。 求在该柱状图中&#xff0c;能够…

Android之Handler分析与理解

Android中的Handler是一个用于处理消息和线程间通信的机制。它可以将Runnable对象或Message对象发送到特定的线程中进行处理。 使用Handler的主要目的是在不同的线程之间进行通信&#xff0c;特别是在后台线程中执行一些任务后&#xff0c;将结果发送到UI线程进行更新。 流程图…

pearsonr 报错:numpy.float64 can not be interpreted as an integer

【1】 模型求出pred&#xff0c;pearsonr(pred,true&#xff09; 出现以下报错&#xff1a; 【2】解释&#xff1a; 当在计算皮尔逊相关系数&#xff08;Pearson correlation coefficient&#xff09;时出现"numpy.float64 can not be interpreted as an integer"的…

7.7~7.8学习总结

StringBuider&#xff1a;线程不安全&#xff0c;效率高 StringBuffer&#xff1a;线程安全&#xff0c;效率低&#xff1b; 用法举例&#xff1a; class TWC {public static void main(String []args){StringBuilder sbnew StringBuilder("小麻子爱吃粑粑");Syst…

C语言学习(三十六)---文件操作

上节内容中&#xff0c;我们学习了练习了动态内存的练习题&#xff0c;并且学习了柔性数组的相关内容&#xff0c;大叫要好好掌握&#xff0c;今天&#xff0c;我们将学习文件操作的相关内容&#xff0c;这部分内容实际上很多&#xff0c;我们以点代面&#xff0c;好了&#xf…

windows已有mysql的情况下 mysql8 安装

安装前先停掉本地已有的mysql服务https://dev.mysql.com/downloads/mysql/ 下载mysql压缩包解压创建 my.init 文件 [mysqld] port 3307 basedirF:\mysql-8.0.33-winx64\mysql-8.0.33-winx64 datadirF:\mysql-8.0.33-winx64\mysql-8.0.33-winx64\data max_connections200 cha…

3.3.内存的学习,pinnedmemory,内存效率问题

目录 前言1. Memory总结 前言 杜老师推出的 tensorRT从零起步高性能部署 课程&#xff0c;之前有看过一遍&#xff0c;但是没有做笔记&#xff0c;很多东西也忘了。这次重新撸一遍&#xff0c;顺便记记笔记。 本次课程学习精简 CUDA 教程-内存模型&#xff0c;pinned memory&am…

2023.7.08

#include "widget.h"void Widget::my_slot() {if((edit1->text()"admin")&&(edit2->text()"123456")){qDebug()<<"登陆成功";emit jump();close();}else{qDebug()<<"登陆失败";} }void Widget::b…

OSPFv2基础02_工作原理

目录 1.OSPF接口状态 2.OSPF邻居状态 2.1 OSPF邻居状态类型 2.2 广播网络OSPF邻接关系建立 3.Router ID&#xff08;路由器ID&#xff09;选举 4.DR和BDR选举 4.1 为什么引入DR和BDR&#xff1f; 4.2 DR和BDR的作用 4.3 DR和BDR选举过程 4.4 DR和BDR选举原则 5.OSPF路…