Django学习笔记

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 pathfrom 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.hqwc.cn/news/13777.html

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

相关文章

XSS学习

目录 什么是XSS 概念 理解 XSS分类 存储型XSS 反射型XSS 原理 攻击过程 DOM型 攻击过程 DOM行XSS与反射型XSS区别 存储型XSS与反射型XSS区别 DVWA实验 反射型XSS low等级 JavaScript弹窗函数 攻击思路 攻击者web设计 medium等级 high等级 impissible等级 …

【openGauss数据库】--运维指南04--数据导入

【openGauss数据库】--运维指南04--数据导入 &#x1f53b; 一、openGauss导入数据&#x1f530; 1.1 概述&#x1f530; 1.2 INSERT语句写入数据&#x1f530; 1.3 gsql元命令导入数据&#x1f530; 1.4 使用gs_restore命令、gsql命令导入数据&#xff08;主要&#xff09; &a…

【计算机视觉】对比学习采样器sampler

前置知识准备 Samplers — Open Metric Learning documentation​​​​​​ 在该文档里&#xff0c;category表示类别&#xff0c;label表示商品&#xff0c;instance表示商品不同角度的图片。 category就是blouses_shirts&#xff1b;label就是15&#xff1b;instance就是这…

35.RocketMQ之Broker端消息存储文件详解

highlight: arduino-light Broker端文件详解 dubbo的核心是spi&#xff0c;看懂了spi那么dubbo基本上也懂了。对于rmq来说&#xff0c;它的核心是broker&#xff0c;而broker的核心是commitlog、consumequeue、indexfile&#xff0c;而这些文件对应的最终都是MappedFile&#x…

RTC时钟stm32f407(需要在手册上找到)

首先是备份域&#xff08;BKP&#xff09;&#xff0c;看手册时必须要看的&#xff08;以下的上电复位均是指备份域上电复位&#xff09; RTC时钟 这里的电源电压时指V(BAT); 电源复位&#xff1b; 上面三个寄存器时影子寄存器

在Django中使用xlrd读取excel表格数据

目录 方法一&#xff1a;按行读取 方法二&#xff1a;按表头与表数据一一对应的关系 方法三&#xff1a;按列的方式读取 之前有说到如何在Django中读取数据库数据写入到excel中 今天来说说如何读取excel中的数据&#xff0c;&#xff08;读取后就可以写入到数据库中了&#…

Mysql8安装教程与配置

添加密码 出现报错 MySQL error 1042: Unable to connect to any of the specified MySQL hosts. Failed to connect to MySQL Server 8.0.23 after 10 attempts. Ended configuration step: Starting the server 使用WinR --> 运行 “services.msc” --> 打开service服…

【通览一百个大模型】LaMDA(Google)

【通览一百个大模型】LaMDA&#xff08;Google&#xff09; 作者&#xff1a;王嘉宁&#xff0c;本文章内容为原创&#xff0c;仓库链接&#xff1a;https://github.com/wjn1996/LLMs-NLP-Algo 订阅专栏【大模型&NLP&算法】可获得博主多年积累的全部NLP、大模型和算法干…

NVIC的中断挂起寄存器和EXTI的中断挂起寄存器的区别

&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;仅个人拙见&#xff0c;若有错误&#xff0c;欢迎大家指正&#xff0…

9.33UEC++、容器

1.定义&#xff1a; 2.TArray&#xff1a;快&#xff0c;小&#xff0c;高 &#xff1a;同质容器 &#xff1a;创建栈对象&#xff0c;不能创建堆对象 如何构建TArray&#xff1a; 获取方式&#xff1a; 实现方式&#xff1a;定义一个array容器数组&#xff0c;两种遍历方式…

E. Scuza - 二分+前缀和

分析&#xff1a; 暴力会超时&#xff0c;可以用二分&#xff0c;构建两个数组&#xff0c;一个是a[i]&#xff0c;作为前缀和数组&#xff0c;一个是f[i]表示第i个台阶之前的最大高度的台阶&#xff0c;然后每次二分来查找k&#xff0c;因为尽可能地走的多&#xff0c;所以查找…

OpenCV库进行图像旋转、仿射变换和透视变换

#include <iostream> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp>