Python框架Django入门教程

        Django 是一个使用 Python 编程语言开发的、免费且开源的 Web 应用框架。它遵循 "DRY(Don't Repeat Yourself)" 原则,旨在简化创建功能丰富的、高效率的 Web 网站。Django 提供了模型-视图-控制器(MVC)架构的实现,以及ORM(对象关系映射)系统、内置了 admin 界面、URL 路由、模板引擎、表单处理和强大的安全特性。

开发环境:Python3 + MySQL + PyCharm专业版

一、创建项目

打开PyCharm,新建Django项目(PyCharm社区版无法快速创建Django项目),设置新项目的路径和项目名,然后点击创建即可

等待项目加载完依赖后,可以在PyCharm的终端中可以使用pip freeze命令来查看默认安装的依赖:

可根据实际需求,卸载并安装指定版本的Django:

pip uninstall django
pip install django==3.2.18

二、项目文件主要文件介绍

修改(注意是修改,不是添加!!!)setting.py文件,配置数据库、时区等

# 数据库配置 默认的数据库为sqlite
DATABASES = {
    'default': {
        'ENGINE': 'djangoDemo.db.backends.mysql',  # 数据库类型
        'NAME': 'db_name',  # 数据库名
        'USER': 'username',  # 用户名
        'PASSWORD': 'password',  # 密码
        'HOST': '127.0.0.1',  # 数据库服务器地址
        'PORT': 3306,  # 端口号(MySQL默认3306)
    }
}

# 设置语言代码为zh-hans,默认为en-us
LANGUAGE_CODE = 'zh-hans'
# 设置时区为亚洲上海,默认是UTC
TIME_ZONE = 'Asia/Shanghai'
# 关闭时区感知
USE_TZ = False

打开终端,执行命令,安装mysql依赖:

pip install mysqlclient

三、启动项目

PyCharm运行manage.py启动项目,默认启动端口为8000,直接点击蓝的 http://127.0.0.1:8000/  即可跳转到浏览器访问Django的主页

控制台日志:

浏览器主页:

四、新建应用模块

在PyCharm的终端中执行命令,创建新的应用模块:

python manage.py startapp app名

生成的应用模块目录 :

修改setting.py文件,找到INSTALLED_APPS(约31行处),将新建的应用模块注册到Django中

五、写一个Hello World接口

修改urls.py路由配置文件,添加新的路由:

在新建的应用模块中的views.py中添加hello接口:

浏览器访问 http://127.0.0.1:8000/ 

六、写一个user表的增删改查接口

执行SQL,创建user表:

CREATE TABLE `user`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) NOT NULL COMMENT '名字',
  `account` varchar(20) NOT NULL COMMENT '账号',
  `password` varchar(20) NOT NULL COMMENT '密码',
  `age` int(11) NOT NULL COMMENT '年龄',
  `gender` char(1) NOT NULL COMMENT '性别',
  `money` decimal(10, 2) NOT NULL COMMENT '钱,人民币单位:元',
  `create_time` datetime(0) NOT NULL COMMENT '创建时间',
  `update_time` datetime(0) NOT NULL COMMENT '更新时间',
  `isdel` int(11) NOT NULL DEFAULT 0 COMMENT '该用户是否已删除,0未删除,1已删除',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 ROW_FORMAT = DYNAMIC;

INSERT INTO `user` VALUES (1, '小白', 'aaa@qq.com', '123456', 15, '男', 100.00, '2023-01-15 00:35:44', '2023-01-15 00:35:44', 1);
INSERT INTO `user` VALUES (2, '小明', 'bbb@qq.com', '123456', 16, '男', 58.00, '2023-01-15 00:35:44', '2023-01-15 00:35:44', 0);
INSERT INTO `user` VALUES (3, '大白', 'ccc@qq.com', '123456', 22, '女', 168.00, '2023-01-15 00:35:44', '2023-01-15 00:35:44', 0);
INSERT INTO `user` VALUES (4, '大明', 'ddd@qq.com', '123456', 21, '男', 12.50, '2023-01-15 00:35:44', '2023-01-15 00:35:44', 0);
INSERT INTO `user` VALUES (5, '小刚', 'eee@qq.com', '123456', 17, '男', 65.23, '2023-01-15 00:35:44', '2023-01-15 00:35:44', 1);
INSERT INTO `user` VALUES (6, '小灵', 'fff@qq.com', '123456', 18, '女', 95.32, '2023-01-15 00:35:44', '2023-01-15 00:35:44', 0);
INSERT INTO `user` VALUES (7, '小月', 'ggg@qq.com', '123456', 19, '女', 55.50, '2023-01-15 00:35:44', '2023-01-15 00:35:44', 0);
INSERT INTO `user` VALUES (8, '小华', '111@qq.com', '123456', 16, '男', 38.00, '2023-01-15 00:35:44', '2023-01-15 00:35:44', 1);
INSERT INTO `user` VALUES (9, '小雪', '222@qq.com', '123456', 20, '女', 320.77, '2023-01-15 00:35:44', '2023-01-15 00:35:44', 0);

在新建的应用模块中的models.py中创建user表的模型类

# 模型层,实体类层
class User(models.Model):
    # 设置所需要映射的数据表,默认映射的表名是:应用名_全小写类名
    class Meta:
        db_table = "user"

    ISDEL_CHOICES = (
        (0, "未删除"),
        (1, "已删除")
    )

    # Django自带id字段,无需手动添加
    # id = models.IntegerField()
    # 将变量与数据库表字段进行映射,CharField限制该字段为字符串类型,限制该字段的长度、默认值,verbose_name字段注释
    name = models.CharField(max_length=20, default="", verbose_name="姓名")
    account = models.CharField(max_length=20, default="", verbose_name="账号")
    password = models.CharField(max_length=16, default="", null=False, verbose_name="密码")
    age = models.IntegerField()
    gender = models.CharField(max_length=1)
    money = models.DecimalField(max_digits=10, decimal_places=2)
    create_time = models.DateTimeField()
    update_time = models.DateTimeField()
    # choices限制字段的取值范围,只能是0和1,只是形式上限制,实际执行user.del=2时并不会报错,可以正常插入到数据库
    isdel = models.IntegerField(null=False, choices=ISDEL_CHOICES)

在新建的应用模块中的views.py中编写接口:

import json
from datetime import datetime

from django.forms import model_to_dict
from django.http import JsonResponse
from django.shortcuts import HttpResponse
from django.utils import timezone
from django.views.decorators.csrf import csrf_exempt
from django_celery_beat.models import PeriodicTask, ClockedSchedule

from myapp.models import User, Book


def hello(request):
    print(request.method)  # 获取请求方式
    print(request.path)  # 获取请求路径
    return HttpResponse("Hello World")  # 返回一个字符串到前端


@csrf_exempt  # 跨域
def user_list(request, user_id=None):
    if request.method != "GET":
        return JsonResponse({'message': '请求方式错误,应使用GET请求 !!!'})
    print("GET请求参数:", request.GET)  # 获取get请求路径中的参数

    if user_id:  # 如果提供了用户ID,则返回单个用户的信息
        try:
            # 查询指定id,且isdel字段等于0的用户信息
            user = User.objects.filter(isdel=0).get(id=user_id)
        except User.DoesNotExist:
            return JsonResponse({'message': '未找到该用户信息 !!!'})

        user = model_to_dict(user)  # 转换为字典类型
        return JsonResponse(user)

    # 查询用户列表,返回的是QuerySet类型
    users = User.objects.filter(isdel=0).all()
    # 遍历数据
    for user in users.values():
        print(user)
        break

    # 将数据转换为list类型
    user_list = list(users.values())
    # 向前端返回JSON字符串,safe=False允许传入非字典类型数据
    return JsonResponse(user_list, safe=False)


@csrf_exempt  # 跨域
def user_add(request):
    if request.method != "POST":
        return JsonResponse({'message': '请求方式错误,应使用POST请求 !!!'})

    request_data = json.loads(request.body)  # 获取请体中的参数
    print(request_data)

    now_time = datetime.now()
    user = User(name=request_data.get('name'),
                account=request_data.get('account'),
                password=request_data.get('password'),
                age=request_data.get('age'),
                gender=request_data.get('gender'),
                money=0.00,
                create_time=now_time,
                update_time=now_time,
                isdel=0,
                )
    print(user.name, user.create_time)
    user.save()
    return JsonResponse({'message': '添加成功'})


@csrf_exempt  # 跨域
def user_update(request, user_id):
    if request.method != "PUT":
        return JsonResponse({'message': '请求方式错误,应使用PUT请求 !!!'})
    try:
        user = User.objects.filter(isdel=0).get(id=user_id)
    except User.DoesNotExist:
        return JsonResponse({'message': '未找到该用户信息 !!!'})

    request_data = json.loads(request.body)  # 获取请体中的参数
    print(request_data)

    user.name = request_data.get('name')
    user.password = request_data.get('password')
    user.age = request_data.get('age')
    user.gender = request_data.get('gender')
    user.update_time = datetime.now()
    print(user.name, user.update_time)
    user.save()

    return JsonResponse({'message': '修改成功'})


@csrf_exempt  # 跨域
def user_del(request, user_id):
    if request.method != "DELETE":
        return JsonResponse({'message': '请求方式错误,应使用DELETE请求 !!!'})
    try:
        user = User.objects.filter(isdel=0).get(id=user_id)
    except User.DoesNotExist:
        return JsonResponse({'message': '未找到该用户信息 !!!'})

    user.isdel = 1
    user.save()
    return JsonResponse({'message': '删除成功'})

修改urls.py文件,添加路由:

from myapp import views

urlpatterns = [
    path('admin/', admin.site.urls),
    # 添加路由,当用户发送请求时,执行myapp.views.hello函数
    path('', views.hello),

    # 获取全部用户信息
    path('user/list/', views.user_list),
    # 获取指定id的用户信息,<int:user_id>是RESTful API风格请求,将请求url的最后一段值作为请求参数
    path('user/<int:user_id>/', views.user_list),
    path('user/add/', views.user_add),
    path('user/update/<int:user_id>/', views.user_update),
    path('user/del/<int:user_id>/', views.user_del),
]

重启项目进行接口测试,可使用ApiPost工具对post、put、delete等类型的请求进行测试

  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值