Django规范化编程1

Django技能复苏

依旧是吃吹不忘挖井人环节:https://blog.csdn.net/weixin_41790086/article/details/80726480

MVC : 典型代表(flask):

VC: Model-View-Controller 模型-视图-控制器

  • M: 数据处理
  • V: 界面显示
  • C: 逻辑处理

上个世纪八十年代为Smalltalk语言发明的一种 软件框架模式。最开始用于Desktop程序开发,现在已被广泛使用,包括Web开发。

核心思想: 分层,解耦。MVC分离了 数据处理 和 界面显示 的代码,使得程序可以在不修改数据处理相关逻辑的前提下,方便地切换不同的显示界面

目的: 提高程序的扩展性和可维护性。
在这里插入图片描述

Disad:

MVC 层与层之间还是太过紧密,调试应用程序带来了一定的困难。每个构件在使用之前都需要经过彻底的测试。

MVT(虽然本质上还是MVC) 典型:Django

在这里插入图片描述

M: Model, 模型 与MVC中的M相同,负责对数据的处理

V: View, 视图 与MVC中的C类似,负责处理用户请求,调用M和T,响应请求

T: Template, 模板 与MVC中的V类似,负责如何显示数据(产生html界面

Django创建的文件层次

  • 创建:

    pip install django
    django django-admin startproject project_Name
    django-admin startapp appName
    
  • 文件树

    study_Django
        │  manage.py    		# web启动脚本,项目工程入口
        │
        ├─studyapp0				# app(可有多个),放服务
        │  │  admin.py			# 后台管理配置脚本
        │  │  apps.py			# 声明但钱应用的基本信息
        │  │  models.py			# 数据模型类声明所在脚本
        │  │  tests.py			# 单元测试类
        │  │  views.py			# 声明当前应用的试图处理函数或类
        │  │  __init__.py
        |  |  urls.py			# 自创建,当前应用模块的子路由
        │  │
        │  └─migrations
        │          __init__.py
        │
        └─study_Django
                asgi.py
                settings.py		# 设置文件,数据库连接,app注册,中间件与模板配置
                urls.py			# 总路由
                wsgi.py			# Django实现wsdi脚本
                __init__.py
    
Task1 (并不是) 第一个 HelloWorld
  • 添加urls的主路由配置,并构造路由响应函数:
from django.http import HttpRequest,HttpResponse
# 声明一个view的处理函数
# 所有view处理函数都必须声明request参数
def helloworld(request:HttpRequest):
    return HttpResponse('HelloWorld'.encode('utf-8'))
# 主路由
urlpatterns = [
    path('admin/', admin.site.urls),
    path('hello/',helloworld)
]
  • 执行脚本

    D:/大三下/Django/venv/Scripts/python.exe manage.py runserver (8000端口)
    
  • 访问成功

Task2 Django的请求参数

上面说到,在view处理函数中我们应该用一个变量承接Http的请求,而从这个请求中我们应该要抽丝剥茧出其参数。请求参数包括请求头,请求方式,查询数据,表单参数,文件byte数据,请求路径,COOKIE等

获取方式, 在request加点后各种打印即可

模板传参,用字典的格式

def model_try(request:HttpRequest):
    model_value = {
        'name': '小王',
        'id':3333333
    }
    
    # 提前配置setting里面的templates.dir
    return render(request,'first_model.html', {'user':model_value})

# 主路由
urlpatterns = [
    path('admin/', admin.site.urls),
    path('hello/',helloworld),
    path('model/',model_try)
]
<h5>
    {{user}}
</h5>
{%for i in user%}
<h6>
{{i}}
</h6>
{% endfor %}

在这里插入图片描述

由此也可得出 Django的请求过程:

  1. 请求发送到url分发器
  2. urls根据路由规则(正则)分发到viewers
  3. views调用Model交互数据
  4. views将数据渲染到模板中
  5. 模板呈现给用户

然而在生产环境中一般不直接编辑主路由,而是将主路由url复制到子路由下面进行路由导向,同时函数一般卸载子路由的views通过中导包传入子路由

Task3 模型ORM

在使用ORM模型之前,首先要生成迁移文件,在执行迁移命令

  • 数据库配置

    DATABASES = {
        'my_test': {
        	# 说明你要连的库为mysql
            'ENGINE': 'django.db.backends.mysql',
            # 数据库名称
            'NAME': 'api_test',
            # IP 本地为127.0.0.1
            'HOST':'127.0.0.1',
            # 端口默认是3306 oracel默认端口1521
            'PORT':'3306',
            # 数据库用户
            'USER':'xxx',
            # 数据库密码
            'PASSWORD':'xxx@123'
        }
    
    
  • 迁移

    python manage.py makemigrations  # 生成迁移文件
    No changes detected
    
    python manage.py migrate     # 开始迁移
    Running migrations:
      Applying contenttypes.0001_initial... OK
      Applying auth.0001_initial... OK
      Applying admin.0001_initial... OK
    
    
  • 一旦生成迁移文件迁移已成功,不要删除迁移文件

简单模型声明

更改apps中的models,自定义你需要的模型。

# app/model.py 
# 创建一个玩家的模型
from django.db import models

# Create your models here.
class PlayerEntity(models.Model):
    # 默认会生成ID, 不用自己写
    virture_name = models.CharField(default = 'GodForever',max_length=20)
    level = models.IntegerField(default = 1)
    play_valu = models.FloatField(default=0.0)
    # 设置存放的数据库表名
    class Meta:
        db_table = 'player_Inform'

# 生成迁移文件
(venv) D:\大三下\Django\venv\Scripts>python manage.py makemigrations
Migrations for 'test1':
  study_Django\test1\migrations\0001_initial.py
    - Create model PlayerEntity

# 迁移
(venv) D:\大三下\Django\venv\Scripts>python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions, test1
Running migrations:
  Applying test1.0001_initial... OK

在数据库中出现了迁移表,well Done

在子路由下获取数据:

# 父路由
# 父路由添加子目录
from django.urls import path,include
urlpatterns = [
    # 子目录
    path('son/',include('test1.urls'))
]

# 子路由
# 子路由导入刚刚创建的实体
from django.urls import path
from django.http import HttpRequest,HttpResponse
from django.shortcuts import render
from .models import PlayerEntity
def trying(request:HttpRequest):
    Player = PlayerEntity.objects.all().values()
    print(list(Player))
    return render(request,'second_model.html', {'Player':Player})

urlpatterns = [
    path('try2/',trying)
]

在这里插入图片描述得到数据库中的结果, well done

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值