01_Django-介绍-项目结构-URL和视图函数

Posted mycpen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了01_Django-介绍-项目结构-URL和视图函数相关的知识,希望对你有一定的参考价值。

文章目录

博客链接 https://blog.csdn.net/cPen_web
视频链接 https://www.bilibili.com/video/BV1vK4y1o7jH


Django介绍

起源

2005年发布,采用Python语言编写的开源web框架
早期的时候Django主做新闻和内容管理的
重量级的Python Web框架,Django配备了常用的大部分组件

组件

包含组件如下:
        基本配置文件/路由系统
        模型层(M)/模块层(T)/视图层(V)
        Cookies和Session
        分页及发邮件
        Admin管理后台

用途

用途一:网站/微信公众号/小程序后端开发

用途二:人工智能平台融合

版本

Django官网:http://www.djangoproject.com
Django中文文档参考网站:https://yiyibooks.cn
版本
        最新版本3.0.x
        当前教学版本2.2.12

安装

支持Python的版本 - 3.5,3.6,3.7,3.8
在线安装
        虚拟机执行 sudo pip3 install django==2.2.12
        检查是否成功 sudo pip3 freeze |grep -i ‘Django’
离线安装 - 官方下载离线安装包
        将安装包复制到虚拟机
        解压缩 tar -xvf Django-2.2.12.tar.gz
        进入目录 cd Django-2.2.12
        执行安装 sudo python3 setup.py install
        检查是否成功 sudo pip3 freeze |grep -i ‘Django’


Django项目结构

创建项目

成功安装Django后,虚拟机终端会有django-admin命令
执行 django-admin startproject 项目名 即可创建出对应项目文件夹
例如 终端执行 django-admin startproject mysite1; 则创建出mysite1项目

启动服务

启动[测试开发阶段]
        1.终端cd进入到项目文件夹,例如 cd mysite1
        2.进入到项目文件夹后,执行 python3 manage.py runserver 启动django服务完【注:该启动方式下,Django在前台启动服务,默认监听8000端口】
        3.浏览器访问 http://127.0.0.1:8000 可看到django的启动页面
        注:【如果想更换端口,则可以用 python3 manage.py runserver 端口号】

关闭服务

方式1:在runserver启动终端下
        执行Ctrl + c可关闭Django服务
方式2:在取它终端下
        执行sudo lsof -i:8000 查询出Django的进程id
        执行 kill -9 对应Django进程id

启动常见问题

问题:启动时报错
        Error: That port is already in use.
问题原因:端口已被使用,证明当前Django启动时,默认监听的8000端口已被其他进程占用
解决方案:参考关闭服务

结构解析

展开mysite1项目,结构如下

$ tree mysite1
mysite1
├── db.sqlite3					#注:默认django数据库存储文件
├── manage.py
└── mysite1
    ├── __init__.py
    ├── __pycache__
    │   ├── __init__.cpython-39.pyc
    │   ├── settings.cpython-39.pyc
    │   ├── urls.cpython-39.pyc
    │   └── wsgi.cpython-39.pyc
    ├── settings.py
    ├── urls.py
    └── wsgi.py

manage.py

manage.py包含项目管理的子命令,如:
        python3 manage.py runserver 启动服务
        python3 manage.py startapp 创建应用
        python3 manage.py migrate 数据库迁移
        …
        直接执行python3 manage.py 可列出所有的Django子命令

项目同名文件夹

项目同名文件夹 - mysite1/mysite1
        __init__: Python包的初始化文件
        wsgi.py: WEB服务网关的配置文件 - Django正式启动时,需要用到
        urls.py: 项目的主路由配置 - HTTP请求进入Django时,优先调用该文件
        settings.py: 项目的配置文件 - 包含项目启动时需要的配置

settings.py

settings.py包含了Django项目启动的所有配置项
配置项分为 公有配置 和 自定义配置
配置项格式例:BASE_DIR = ‘xxxx’
公有配置 - Django官网提供的基础配置
        https://docs/djangoproject.com/en/2.2/ref/settings/

公有配置

BASE_DIR
        用于绑定当前项目的绝对路径(动态计算出来的),所有文件夹都可以依赖此路径

DEBUG
        用于配置Django项目的启动模式,取值:
        True表示开发环境中使用 开发调试模式(用于开发中)
        False表示当前项目运行在 生产环境中

ALLOWED_HOSTS
设置允许访问到本项目的host头值
        []空列表, 表示只有请求头中host为 127.0.0.1, localhost 能访问本项目 - DEBUG = True时生效
        [‘*’], 表示任何请求头的host都能访问到当前项目
        [‘192.168.1.3’, ‘127.0.0.1’] 表示只有当前两个host头的值能访问当前项目
示例:如果要在局域网其它主机也能访问此主机的Django服务,启动方式如下:
        python3 manage.py runserver 0.0.0.0:5000
        指定网络设备如果内网环境下其它主机想正常访问该站点,需要加ALLOWED_HOSTS=[‘内网ip’]

INSTALLED_APPS - 指定当前项目中安装的应用列表
MIDDLEWARE - 用于注册中间件
TEMPLATES - 用于指定模板的配置信息
DATABASES - 用于指定数据库的配置信息
LANGUAGE_CODE - 用于指定语言配置
        英语: “en-us”
        中文: “zh-Hans”

TIME_ZONE - 用于指定当前服务器端时区
        世界标准时间: “UTC”
        中国时区: “Asia/Shanghai”
ROOT_URLCONF - 用于配置主url配置 ‘mysite1.urls’
        ROOT_URLCONF = ‘mysite1.urls’

#项目绝对路径
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

DEBUG = True
# 启动模式
# True - 调试模式
# 1,检测代码改动后,立刻重启服务
# 2,报错页面
# False - 正式启动模式 / 上线模式

#请求头Host头
ALLOWED_HOSTS = ['127.0.0.1']
#ALLOWED_HOSTS = ['www.tedu1.com']

自定义配置

settings.py中也可以添加 开发人员 自定义的配置
配置建议:名字尽量个性化 - 以防覆盖掉公有配置
        例如:ALIPAY_KEY = ‘xxxxxx’
settings.py中的所有配置项,都可以按需的在代码中引入
引入方式:from django.conf import settings


URL和视图函数

URL - 结构

定义 - 即统一资源定位符 Uniform Resource Locator
作用 - 用来表示互联网上某个资源的地址
URL的一般语法格式为(注:[] 代表其中的内容可省略):
        protocol://hostname[:port]/path[?query][#fragment]
        http://tts.tmooc.cn/video/showVideo?menuld=657421&version=AID999#subject

protocol(协议)

http://tts.tmooc.cn
http 通过HTTP访问该资源。格式 http://
https 通过安全的HTTPS访问该资源。格式 https://

hostname(主机名)

http://tts.tmooc.cn
是指存放资源的服务器的域名系统(DNS)主机名、域名 或 IP地址

port(端口号)

http://tts.tmooc.cn:80
整数,可选,省略时使用方案的默认端口
各种传输协议都有默认的端口号,如http的默认端口为80

path(路由地址)

http://tts.tmooc.cn/video/showVideo
由零或多个 “/” 符号隔开的字符串,一般用来表示主机上的一个目录或文件地址。路由地址决定了服务器端如何处理这个请求

query(查询)

/video/showVideo?menuld=657421&version=AID999
可选,用于给动态网页传递参数,可有多个参数,用 “&” 符号隔开,每个参数的名和值用 “=” 符号隔开

fragment(信息片段)

Version=AID999#subject
https://docs.djangoproject.com/en/2.2/#the-template-layer
字符串,用于指定网络资源中的片段。例如一个网页中有多个名词解释,可使用fragment直接定位到某一名词解释

处理URL请求

浏览器 地址栏 -> http://127.0.0.1:8000/page/2003/
        1.Django从配置文件中 根据 ROOT_URLCONF 找到 主路由文件;默认情况下,该文件在 项目同名目录下的urls;例如 mysite1/mysite1/urls.py
        2.Django加载 主路由文件中的 urlpatterns 变量【包含很多路由的数组】
        3.依次匹配 urlpatterns 中的 URL,匹配到第一个合适的中断后续匹配
        4.匹配成功 - 调用对应的视图函数处理请求,返回响应
        5.匹配失败 - 返回404响应

主路由 - urls.py

主路由 - urls.py 样例


from django.urls import path
form . import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('page/2003/', views.page_2003),
    path('page/2004/', views.page_2004),
]

视图函数

视图函数是用于接收一个浏览器请求HttpRequest对象)并通过HttpRequest对象返回响应的函数。此函数可以接收浏览器请求并根据业务逻辑返回相应的响应内容给浏览器

语法

def xxx_view(request[, 其它参数...]):
    return HttpResponse对象

样例

# file: <项目同名文件夹下>/views.py
from django.http import HttpResponse

def page1_view(request):
    html = "<h1>这是第1个页面</h1>"
    return HttpResponse(html)

示例

# http://127.0.0.1:8000/page/2003/

# <项目同名文件夹下>/urls.py
from . import views

urlpatterns = [
    path('admin/', admin.site.urls),
    #http://127.0.0.1:8000/page/2003/
    path('page/2003/', views.page_2003_view)
]

# <项目同名文件夹下>/views.py
from django.http import HttpResponse

def page_2003_view(request):
    html = "<h1>这是第1个页面</h1>"
    return HttpResponse(html)

以上是关于01_Django-介绍-项目结构-URL和视图函数的主要内容,如果未能解决你的问题,请参考以下文章

01_Django-介绍-项目结构-URL和视图函数

01_Django-介绍-项目结构-URL和视图函数

Django 1.8_视图和URL配置

Django URL路由分发系统

邂逅Django——视图

django框架----django 模型 URL配置 视图函数