• [Django-1] 快速建立项目


    初始化项目

    python -m pip install Django
    cd 到想要创建项目的目录
    django-admin startproject DjangoStudy
    
    这时候在目录中就会有一个DjangoStudy的目录,用IDEA打开
    
    • 1
    • 2
    • 3
    • 4
    • 5

    找到setting.py修改数据库信息

    DATABASES = {
        # 'default': {
        #     'ENGINE': 'django.db.backends.sqlite3',
        #     'NAME': BASE_DIR / 'db.sqlite3',
        # }
        'default': {
            'ENGINE': 'django.db.backends.mysql',  # 数据库引擎
            'NAME': 'study',  # 数据库名字
            'USER': 'root',  # 用户名
            'PASSWORD': 'xxx',  # 密码
            'HOST': 'ip',  # HOST
            'PORT': '3306',  # 端口
            'OPTIONS': {'charset': 'utf8mb4'},  # 打开数据库 编码格式 ——解决4字节表情无法储存问题
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    创建app

    python manage.py startapp +'名称'
    在这里我的运行命令是
    python manage.py startapp app
    
    • 1
    • 2
    • 3

    项目和app的关系

    项目是程序的第一入口,创建项目之后会有基础的setting配置文件,以及执行入口manager.py文件,这是自动生成的。至于app意思是一个项目中我可以开发多个模块,这些模块的统一入口都是项目。每个子模块可以实现独立的代码逻辑。
    项目中的urls.py文件

    urlpatterns = [
        path('admin/', admin.site.urls),
        url('app/', include('app.urls'))
    ]
    
    • 1
    • 2
    • 3
    • 4

    这个文件是程序的全局url的入口,后面include意思是和别的app中的url进行拼接。每一个app都应该有自己的url.py不过和项目中的urls.py不同,其他的都要开发者手动建立,唯一项目的urls.py是自动生成的。
    app中的urls.py
    urlpatterns = [
    url(r’^test’, UserOptionsApi.as_view())
    ]

    下面的代码一般放在view.py中

    class UserOptionsApi(APIView):
        def get(self, request):
             return HttpResponse("

    welcome to Django

    "
    )
    • 1
    • 2
    • 3

    项目启动

    python manage.py runserver
    注意这种方式启动的web服务器时Django内置的web服务器,出于性能能=考虑这种方式只适用于开发测试。正式运行的网站要用WSGI
    • 1
    • 2

    前端请求: http://127.0.0.1:8000/child/test
    可以看到项目中的url和 app中的url路径进行了合并。

    项目中中的urls.py和app中的urls.py的关系

    1. 写法不同
    项目中写法:url('child/', include('child.urls'))
    app中写法:url(r'^test', UserOptionsApi.as_view())
    项目中一般用include(app包名+'.'+urls)这样就会找到对应的app中的urls.py文件
    app中的写法会对应到具体的视图(也就是改请求路径的响应主体)
    
    • 1
    • 2
    • 3
    • 4
    1. 相关性
      前者和后者的路径会拼接起来

    Model

    对应数据库中的一个表
    models.py增加下面的代码

    class Grade(models.Model):
        id = models.AutoField(verbose_name='自增id', name="id", primary_key=True)
        grade_name = models.CharField(verbose_name="班级名称", name="grade_name", max_length=200)
        create_time = models.DateTimeField(verbose_name='创建时间',name="create_time", auto_now_add=True)  # 第一次赋值
        update_time = models.DateTimeField(verbose_name='最后一次更新时间',name="update_time", auto_now=True)  # 第二次赋值
    
    • 1
    • 2
    • 3
    • 4
    • 5

    Django生成表

    python manage.py makemigrations  app
    Python manager.py migrate app
    # 查看数据库就会看到一张表
    
    • 1
    • 2
    • 3

    查询

    1. modelClass.objects.all()->QuerySet
      返回可迭代对象, 类似于select * from table
    2. modelClass.objects.filter(字段名称=value)->QuerySet
    3. modelClass.objects.get(字段名称=value)->modelClass
      Get 只能返回一条数据,如果未找到数据则抛出异常, filter则不会
    4. modelClass.objects.values(列1,列2)->list(dict)
      返回的不是modelClass 而是字典

    理解

    其实没什么特殊的,这个框架把数据库的增删改查做了很多的封装,甚至增加了自动建立数据库表的功能. 其实就是ORM
    object relation model. 站在我自己的立场,我个人其实不太喜欢用框架去查询数据库,自己定义python 对象,去查询数据库,对数据库的连接做个封装,然后数据库查出来的数据 手动封装为python 对象,最简单了。 理解这种框架的设计初衷,但是好像并没有减轻工作量。。。因为要按照既定的要求去写代码,会导致学习成本升高。。。。

  • 相关阅读:
    深入理解JVM虚拟机第十九篇:JVM字节码中方法内部的结构和与局部变量表中变量槽的介绍
    分布式互斥
    mathtype嵌入到wps中
    云原生系列 【基于CCE Kubernetes编排实战二】
    好用的笔记软件推荐
    java的stream让我灵光一现
    基于一个多分类问题比较bert单任务训练和多任务训练
    欣赏绍兴的美景,感受OLED透明拼接屏带来的视觉盛宴
    最新的爱心代码已就绪 发射成功 速来领取啦
    QKD安全攻击防御方案分析和分级评估研究报告
  • 原文地址:https://blog.csdn.net/qq_36066039/article/details/132880288