Django学习笔记01

学习课程地址:https://www.bilibili.com/video/BV1NL41157ph

1.安装Django

pip install django

2.创建项目

  • 方法1:使用命令行创建
django-admin startproject learn_demo[项目名称]
  • 方法2:使用PyCharm新建项目时选择Django

3.项目文件介绍

learn_demo
   ├─manage.py             [项目的管理,启动、创建app、数据管理]
   └─learn_demo
       ├─asgi.py           [接受网络请求,异步请求]
       ├─settings.py       [项目配置]
       ├─urls.py           [url和函数的对应关系]
       ├─wsgi.py           [接受网络请求,同步请求]
       └─__init__.py

4.创建APP

python manage.py startapp app01
app01                       
  ├─admin.py                [django默认提供的admin后台管理]
  ├─apps.py                 [app启动类]
  ├─models.py               [数据库操作]
  ├─tests.py                [单元测试]
  ├─views.py                [视图函数]
  ├─__init__.py                                      
  └─migrations              [数据库变更记录]
       └─__init__.py 

5.运行Django

  • 在【settings.py】中注册app
    请添加图片描述

    • 在【urls.py】编写URL和视图函数对应关系
      请添加图片描述
  • 在【views.py】编写视图函数
    请添加图片描述- 启动Django项目

    • 命令行启动

      python manage.py startserver
      
    • PyCharm启动

6.模板和静态文件

6.1添加前端页面(templates)

在【views.py】和【urls.py】中创建视图函数映射,同时使用render返回指定前端页面。
请添加图片描述
render函数会在templates目录中寻找前端页面。

templates目录可以存在于项目根目录或者app目录之下,根目录下的templates需要在【settings.py】文件中配置方可生效,各app目录下的templates目录会按照【settings.py】文件中注册顺序依次寻找。

6.2静态文件处理

在app目录下创建static目录,所有的静态文件(css、img、js等)均可通过此目录进行管理,在前端页面中使用{% load static %} 的方式导入,使用{% static 'img/1.png' %}使用static目录下的静态文件。
请添加图片描述

7.模板语法

7.1占位符

{{ }} 包含变量

{% %} 包含语句

{# #} 包含注释

html中使用一些占位符,再通过render函数进行渲染。
请添加图片描述

7.2循环与分支结构

请添加图片描述
请添加图片描述

7.3新闻展示案例

请添加图片描述
请添加图片描述

8.登陆案例

请添加图片描述
请添加图片描述
请添加图片描述### 9.数据库操作

9.1数据库连接模块
pip install mysqlclient
9.2连接数据的配置

在【settings.py】文件中修改数据库配置

DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.mysql",
        "NAME": "mydatabase",
        "USER": "mydatabaseuser",
        "PASSWORD": "mypassword",
        "HOST": "127.0.0.1",
        "PORT": "3306",
    }
}

数据库配置官方文档:https://docs.djangoproject.com/en/4.2/ref/settings/#databases

9.3使用ORM创建表

在【models.py】文件中创建表类

class UserInfo(models.Model):
    name = models.CharField(max_length=32)
    password = models.CharField(max_length=64)
    age = models.IntegerField()
python manage.py makemigrations
python manage.py migrate

注意:django最新版本为4.2(2023-06-25),要求MySQL版本在8.0以上,4.0版本的django要求MySQL版本在5.7以上。

请添加图片描述

9.4使用ORM修改表结构

在【models.py】文件中通过修改类,然后使用manage命令,即可完成对表结构的调整。

在增加表字段时,注意需要指定默认值或在命令行填入默认值,或者设置可为空。

class UserInfo(models.Model):
    name = models.CharField(max_length=32)
    password = models.CharField(max_length=64)
    age = models.IntegerField()
    data = models.CharField(max_length=32, \
                            null=True, blank=True)    # 设置可为空
    size = models.IntegerField(default=0)             # 设置默认值
python manage.py makemigrations
python manage.py migrate
9.5使用ORM增删查改
def orm(request):
    # 1.增加数据
    Department.objects.create(title="销售部")
    Department.objects.create(title="IT部")
    Department.objects.create(title="运营部")
    UserInfo.objects.create(name="张三", password="asc")
    UserInfo.objects.create(name="李四", password="1234")
    UserInfo.objects.create(name="王五", password="0987")
    return HttpResponse("Successful!")

请添加图片描述

def orm(request):
    # 2.删除数据
    UserInfo.objects.filter(id=2).delete()
    Department.objects.all().delete()
    return HttpResponse("Successful!")

请添加图片描述

def orm(request):
    # 3.获取数据
    # 返回一个QuerySet类型,类似一个列表,每一项包含数据每一行数据
    data_list = UserInfo.objects.all()

    s = ""
    for obj in data_list:
        s = f"{s} {obj.name} {obj.password} {obj.age}"

    return HttpResponse(f"{s}")

请添加图片描述

def orm(request):
    # 4.更新数据
    UserInfo.objects.filter(id=1).update(password=1234)

    return HttpResponse("successful!")

请添加图片描述

10.用户管理案例

请添加图片描述

页面代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Info LIST</title>
    <style>
        table, td, th {
            border: 1px black solid;
            border-collapse: collapse;
        }

        th, td {
            width: 4em;
            height: 2em;
            text-align: center;
        }

        input {
            height: 2em;
            font-size: 1em;
        }
    </style>
</head>
<body>
<h1>Info LIST</h1>
<table>
    <thead>
    <tr>
        <th>id</th>
        <th>name</th>
        <th>password</th>
        <th>age</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="http://localhost:8000/info/del?nid={{ obj.id }}">delete</a></td>
        </tr>
    {% endfor %}
    </tbody>
</table>

<br>

<form method="post" action="http://localhost:8000/info/add">
    {% csrf_token %}
    <label for="name">name: <input type="text" name="name"></label>
    <label for="password">password: <input type="password" name="password"></label>
    <label for="age">age: <input type="number" name="age"></label>
    <input type="submit" value="submit">
</form>
</body>
</html>
10.1显示用户
def info_list(request):
    data_list = UserInfo.objects.all()
    return render(request, "info_list.html", {"data_list": data_list})
10.2添加用户
def info_add(request):
    data = request.POST
    name = data["name"]
    password = data["password"]
    age = data["age"]
    UserInfo.objects.create(name=name, password=password, age=age)
    return redirect("http://localhost:8000/info/list")
10.3删除用户
def info_del(request):
    nid = request.GET["nid"]
    UserInfo.objects.filter(id=nid).delete()
    return redirect("http://localhost:8000/info/list")
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值