Django项目启动_PD我是你的真爱粉的博客-程序员秘密_django项目启动

技术标签: python  django  数据库  Django框架  

Django项目启动 – 潘登同学的后端笔记

快速启动

virtulaenv django_env
pip install django
django-admin startproject MyFirstDjango
cd MyFirstDjango
python manage.py runserver

目录结构

MyFirstDjango/
    manage.py        # 启动文件
    MyFirstDjango/
        __init__.py  # 初始化文件
        settings.py  # 数据库配置
        urls.py      # router控制
        wsgi.py      # 项目部署文件

创建子应用

当然可以在原MyFirstDjango下写,但是有时候想创建子应用,与MyFirstDjango应用有一些文件的隔离

创建一个叫myapp01的子应用

python  manage.py  startapp  myapp01

Django介绍

MVC模式

​ MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。

  • M: 管理应用程序的状态(通常存储到数据库中),并约束改变状态的行为(或者叫做“业务规则”)。

  • V: 负责把数据格式化后呈现给用户。

  • C: 接受外部用户的操作,根据操作访问模型获取数据,并调用“视图”显示这些数据。控制器是将“模型”和“视图”隔离,并成为二者之间的联系纽带。

在这里插入图片描述

MTV模式

​ Django也是一个MVC框架。但是在Django中,控制器接受用户输入的部分由框架自行处理,所以 Django 里更关注的是模型(Model)、模板(Template)和视图(Views),称为 MTV模式:

  • M: 代表模型(Model),即数据存取层。 该层处理与数据相关的所有事务: 如何存取、如何验证有效性、包含哪些行为以及数据之间的关系等。

  • T: 代表模板(Template),即表现层。 该层处理与表现相关的决定: 如何在页面或其他类型文档中进行显示。

  • V: 代表视图(View),即业务逻辑层。 该层包含存取模型及调取恰当模板的相关逻辑。 你可以把它看作模型与模板之间的桥梁。

    在这里插入图片描述

ORM映射

ORM 就是通过实例对象的语法,完成关系型数据库的操作的技术,是"对象-关系映射"(Object/Relational Mapping) 的缩写。

在这里插入图片描述

ORM 有下面这些优点

  • 数据模型都在一个地方定义,更容易更新和维护,也利于重用代码。
  • ORM 有现成的工具,很多功能都可以自动完成,比如数据消毒、预处理、事务等等。
  • 它迫使你使用 MVC 架构,ORM 就是天然的 Model,最终使代码更清晰。
  • 基于 ORM 的业务代码比较简单,代码量少,语义性好,容易理解。
  • 你不必编写性能不佳的 SQL。

ORM 也有很突出的缺点

  • ORM 库不是轻量级工具,
  • 对于复杂的查询,ORM 要么是无法表达,要么是性能不如原生的 SQL。
  • ORM 抽象掉了数据库层,开发者无法了解底层的数据库操作,也无法定制一些特殊的 SQL。

Django请求

在这里插入图片描述

myapp01\view.py中设置

from django.shortcuts import render,HttpResponse

# Create your views here.
def first_test(request):
    print('第一个Django项目views')
    return HttpResponse('Django项目第一次请求成功')

def first_html(request):
    html = '''
       <html>
          <body>
             <form method="post">
              用户名:<input name = "username" type="text"></input></br>
              密码:<input name = "password" type = "password"></input></br>
              <input type="submit" value="登录"></input>
             </form>
          </body>
       </html>
       '''
    return HttpResponse(html)

urls.py配置

from myapp01 import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('test/',views.first_test),
    path('login/',views.first_html),
]

启动项目,并在浏览器中打开,127.0.01:8000/test/127.0.01:8000/login/

Django配置文件

django项目创建后,在主应用中,会有一个settings.py文件,这个就是该项目的配置文件

  • settings文件包含Django安装的所有配置
  • settings文件是一个包含模块级变量的python模块,所以该模块本身必须符合python规则,并且可以使用python的语法
  • settings中的所有配置项的key必须全部大写
  • settings中每一个配置项都有默认值,默认配置内容在django/conf/global_settings.py中可以查看到,项目中不需要导入该模块,django框架会自动获取
  • settings中可以添加自定义的配置项

配置详解

import os
"""
    当前文件所在文件夹的上一级目录的绝对路径
    切记2个 os.path.dirname
"""
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

"""
    用于加密session,一个随机的字符串
    这样生成:
    from django.core.management import utils
    utils.get_random_secret_key()
"""
SECRET_KEY = '=*f&[email protected]!w$9h(3ea6p3apl$iua!td1q%-u5r4='

# 调试模式,可以看到错误的所有相信信息,部署时一定要修改为False
DEBUG = True

"""
    允许访问的域名设置
    开发环境不用理会
    运行环境,配置 DEBUG = False后,
    如果允许所有域名访问,则设置 ALLOW_HOSTS = ['*']
    如果指定某些域名可以访问,则设置 ALLOW_HOSTS = ['*.baidu.com']
"""
ALLOWED_HOSTS = []


"""
    应用的配置,
    如:'polls.apps.PollsConfig'
    如果没有 PollsConfig ,那么可以配置为  'polls'
"""
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles', # 只有 DEBUG = Ture 才有效
    
    'myapp01'  # 子应用必须配置,否则不起作用
]

"""
    中间层配置
    自己编写的 中间层 需要配置在最后
    譬如:
    mymidlle.md.TestMiddleware
"""
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',

]

# 配置基础的urls
ROOT_URLCONF = 'firstdjangopy.urls'

# 配置模板
TEMPLATES = [
    {
    
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')]
        ,
        'APP_DIRS': True,
        'OPTIONS': {
    
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

# 服务器部署的WSGI配置
WSGI_APPLICATION = 'firstdjango.wsgi.application'


"""
    数据库配置
    mysql在python3的使用,需要在 __init__.py 中加入以下代码:
    import pymysql

    pymysql.install_as_MySQLdb()
"""
# DATABASES = {
    
#     'default': {
    
#         'ENGINE': 'django.db.backends.sqlite3',
#         'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
#     }
# }
DATABASES = {
    
    'default': {
    
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'django_test1',
        'USER': 'root',
        'PASSWORD': '123456',
        'HOST': '127.0.0.1',
        'PORT': '3306',
    }
}


"""
    用户密码验证
"""
AUTH_PASSWORD_VALIDATORS = [
    {
    
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
    },
    {
    
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
    },
    {
    
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
    },
    {
    
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
    },
]


# 语言选择 , zh-Hans 为中文
LANGUAGE_CODE = 'en-us'

# 时区 Asia/Shanghai 是中国时区
TIME_ZONE = 'UTC'

# 国际化
USE_I18N = True

# 本地化
USE_L10N = True

# 使用时区,配套TIME_ZONE使用,必须设置为 False
USE_TZ = False

"""
    静态文件的路径,默认是 static
    如果在各自项目的static目录以外,还有目录存放静态文件,需要添加如下属性:
    STATICFILES_DIRS = (
        os.path.join(BASE_DIR, "common_static1"),
        '/var/www/static/',
    )
"""
STATIC_URL = '/static/'
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_52185313/article/details/123744470

智能推荐

Python打包分发工具setuptools - pip+wheel 安装、详解及示例_黎陌MLing的博客-程序员秘密_pip wheel

Python打包分发工具setuptools - pip+wheel的安装和打包过程详解示例

竟然如此简单,DataBinding 和 ViewBinding_hi-dhl的博客-程序员秘密_databinding = true

前言首先祝小伙伴们新年快乐,2020 一个不平凡的一年,2021 是你我新的起点。2021 新签名:代码不止,文章不停。2021 第一篇文章是对 2020 年末最后一篇文章 Kotlin 插件的落幕,ViewBinding 的崛起 的一个补充。在之前的文章 Kotlin 插件的落幕,ViewBinding 的崛起 中介绍了 Google 为什么不建议在项目中使用 Kotlin 合成方法(Synthetic 视图), Google 建议使用 ViewBinding 替换 Kotlin 合成方法,.

Glide的用法_dehuai19940321的博客-程序员秘密

最基本用法glide采用的都是流接口方式简单的从网络加载图片Glide.with(context).load(internetUrl).into(targetImageView);从文件加载File file = new File(Environment.getExternalStoragePublicDirectory(Environmen...

linux一句话精彩问答(05年新版) _软若石的博客-程序员秘密

linux一句话精彩问答 2005-01-29 11:10:14 编者: 陈绪 来自: www.linuxhero.com linux英雄站 版本更新时间:2005年01月29日 鉴于目前中国linux的发展水平,90%以上的问题都可以用一句话来回答,这便是本书的初 衷。请访问http://www.linuxhero.com 或http://www.chinaunix.net,获取更详细的文档 和

JSON的详细讲解 --_辰兮要努力的博客-程序员秘密

文章导图一.什么是JSON?官方文档描述JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式,采用完全独立于编程语言的文本格式来存储和表示数据。二.JSON与XML的差异化Json之前,大家都用 XML 传递数据。XML 是一种纯文本格式,所以适合在网络上交换数据,但是 XML 格式比较复杂,所以后来有人发明了Json.三...

随便推点

目标检测、目标检测算法_あずにゃん的博客-程序员秘密_目标检测算法和目标检测方法的区别

日萌社人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新)5.1 目标检测概述5.1.1 什么是目标检测目标检测(Object Detection)的任务是找出图像中所有感兴趣的目标(物体),确定它们的类别和位置。例子:确定某张给定图像中是否存在给定类别(比如人、车、自行车、狗和猫)的目标实例;...

desc table tableName 与 show create table tableName 的区别_monnahi的博客-程序员秘密

show create tableg表示的是创建表的具体语句,如下图效果2.desc table 表示的创建好的表的描述,字段名称,类型,是否为主键等,以表格的形式存在效果...

【全栈之路】uni-app实现用户头像上传,springboot后台接口_千年板蓝根的博客-程序员秘密

uniapp项目,java后端实现用户头像上传,uni-app主要用到两个方法:uni.chooseImage、uni.uploadFile接口文档地址:https://uniapp.dcloud.io/api/request/network-file?id=uploadfile将本地资源上传到开发者服务器,客户端发起一个 POST 请求,其中 content-type 为 multipar...

python获取标签内容_python selenium 获取标签的属性值、内容、状态方法_weixin_39995280的博客-程序员秘密

获取标签内容使用element.attribute()方法获取dom元素的内容,如:dr = driver.find_element_by_id('tooltip')dr.get_attribute('data-original-title') #获取tooltip的内容dr.text #获取该链接的text获取标签属性link=dr.find_element_by_id('tooltip')li...

Algs4-1.4.25扔两个鸡蛋_weixin_33913377的博客-程序员秘密

1.4.25扔两个鸡蛋。和上一题相同的问题,但现在假设你只有两个鸡蛋,而你的成本模型则是扔鸡蛋的次数。设计一种策略,最多扔2sqrt(N)次鸡蛋即可判断出F的值,然后想办法把这个成本降低到~c.sqrt(F)次。这和查找命中(鸡蛋完好无损)比未命中(鸡蛋被摔碎)的成本小得多的情形类似。答:1)~2sqrt(N)次的算法是:约分成sqrt(N)个组,每组sqrt(N)层,先用一个蛋从每组的最...

html链接鼠标在悬停颜色,如何让HTML链接显示悬停样式?_刘孟凯18299747005的博客-程序员秘密

我的ASP.NET主页中有一些代表基本导航菜单的HTML标记。连接三页的三个词。我的CSS和HTML包含在下面供您参考。如何让HTML链接显示悬停样式?当我加载页面时,链接以正确的颜色(红色)显示。如果我将鼠标悬停在链接上,链接将更改为正确的颜色(蓝色)。到目前为止,我们很好。点击链接会将链接颜色更改为正确的颜色(黄色)。如预期的那样,剩下的两个链接仍然是红色/蓝色。点击第二个链接也会将该链接更改...

推荐文章

热门文章

相关标签