Django day01

版权声明:假装自己是个有灵魂的程序员 https://blog.csdn.net/qq_36171645/article/details/90948223

1.web应用程序处理流程:

在这里插入图片描述
服务器程序:
主要就是接收http报文,进行解析
框架程序:
根据解析好的报文,进行处理,实现业务处理(视图)
中间层:

2.Django

**主要目的:**简便,快速开发数据库驱动。代码复用
**特点:**重量级框架:原生提供众多的功能组件。

MVT模式:

模型 数据库 模板
在这里插入图片描述

  • M全拼为Model,与MVC中的M功能相同,负责和数据库交互,进行数据处理。
  • V全拼为View,与MVC中的C功能相同,接收请求,进行业务处理,返回应答。
  • T全拼为Template,与MVC中的V功能相同,负责封装构造要返回的html。

mvc模式说明:

在这里插入图片描述

  • M全拼为Model,主要封装对数据库层的访问,对数据库中的数据进行增、删、改、查操作。
  • V全拼为View,用于封装结果,生成页面展示的html内容。
  • C全拼为Controller,用于接收请求,处理业务逻辑,与Model和View交互,返回结果。

工程搭建:

1.环境的安装:

安装虚拟环境,

mkvirtualenv django_py3_1.11 -p python3

安装Django:注意一定要指定好版本

创建工程:

创建工程,推荐在命令行中使用命令来创建,使用pycham来进行创建,在很多时候,会给配置很多东西,从而造成上线时候出现未知的问题。
创建工程的命令为:

django-admin startproject 工程名称

工程目录的结构:

在这里插入图片描述

setting.py :是项目的整体配置文件:比如 DEBUG 的开关,静态文件的位置等等。
urls.py 是项目的URL配置文件。
wsgi.py 是项目与WSGI兼容的Web服务器入口。
manage.py 是项目管理文件,通过它管理项目。

运行开发服务器:

运行服务器命令如下:

python manage.py runserver ip:端口
或:
python manage.py runserver

创建子应用:

创建子应用的命令

python manage.py startapp 子应用名称

子项目结构

在这里插入图片描述
admin.py 文件跟网站的后台管理站点配置相关。
apps.py 文件用于配置当前子应用的相关信息。
migrations 目录用于存放数据库迁移历史文件。
models.py 文件用户保存数据库模型类。
tests.py 文件用于开发测试用例,编写单元测试。
views.py 文件用于编写Web应用视图。

注册安装子应用:

在setting.py中的,将子应用的配置信息文件apps.py中的Config类添加到INSTALLED_APPS列表中。

创建视图:

  1. 创建
    打开刚创建的users模块,在views.py中编写视图代码。
    from django.http import HttpResponse

    def index(request):
    “”"
    index视图
    :param request: 包含了请求信息的请求对象
    :return: 响应对象
    “”"
    return HttpResponse(“hello the world!”)

说明:
视图函数的第一个传入参数必须定义,用于接收Django构造的包含了请求数据的HttpReqeust对象,通常名为request。
视图函数的返回值必须为一个响应对象,不能像Flask一样直接返回一个字符串,可以将要返回的字符串数据放到一个HTTPResponse对象中。

2. 定义路由URL

  1. 在子应用中新建一个urls.py文件用于保存该应用的路由。

  2. 在users/urls.py文件中定义路由信息。

    from django.conf.urls import url

    from . import views

    #urlpatterns是被django自动识别的路由列表变量
    urlpatterns = [
    # 每个路由信息都需要使用url函数来构造
    # url(路径, 视图)
    url(r’^index/$’, views.index),
    ]

  3. 在工程总路由demo/urls.py中添加子应用的路由数据。

    from django.conf.urls import url, include
    from django.contrib import admin
    

    urlpatterns = [
    url(r’^admin/’, admin.site.urls), # django默认包含的

    #添加
    

    url(r’^users/’, include(‘users.urls’)),
    ]

使用include来将子应用users里的全部路由包含进工程路由中;
r’^users/’ 决定了users子应用的所有路由都已/users/开头,如我们刚定义的视图index,其最终的完整访问路径为/users/index/。

include函数除了可以传递字符串之外,也可以直接传递应用的urls模块,如

from django.conf.urls import url, include
from django.contrib import admin
import users.urls  # 先导入应用的urls模块

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    # url(r'^users/', include('users.urls')),
    url(r'^users/', include(users.urls)),  # 添加应用的路由
]
  1. 启动运行
    重新启动django程序

    python manage.py runserver

在浏览器中输入网址127.0.0.1:8000/users/index/ 可看到返回的信息

配置,静态文件与路由

配置文件:
1. BASE_DIR

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

当前工程的根目录,Django会依此来定位工程内的相关文件,我们也可以使用该参数来构造文件路径。
2.DEBUG:
初始值为True:修改代码文件后,程序会自动重启
若程序出现问题,则会在前端显示问题和代码
3.语言和时间
Django支持本地化处理
语言和时区修改为中国大陆信息

LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'

静态文件:

需要配置两个参数:

STATICFILES_DIRS 存放查找静态文件的目录
STATIC_URL 访问静态文件的URL前缀

注意
Django 仅在调试模式下(DEBUG=True)能对外提供静态文件。
当DEBUG=False工作在生产模式时,Django不再对外提供静态文件,需要是用collectstatic命令来收集静态文件并交由其他静态文件服务器来提供。

5.路由
在这里插入图片描述
1.路由的路径
Django的主要路由信息定义在工程同名目录下的urls.py文件中,该文件是Django解析路由的入口。
每个子应用为了保持相对独立,可以在各个子应用中定义属于自己的urls.py来保存该应用的路由。然后用主路由文件包含各应用的子路由数据。主路由
当然也可直接放在主路由文件中,但不提倡
2.解析顺序:自上而下
提示:
需要注意定义路由的顺序,避免出现屏蔽效应。

3.命名
在定义路由的时候,可以为路由命名,方便查找特定视图的具体路径信息。

  1. 在使用include函数定义路由时,可以使用namespace参数定义路由的命名空间,如

    url(r’^users/’, include(‘users.urls’, namespace=‘users’)),

命名空间表示,凡是users.urls中定义的路由,均属于namespace指明的users名下。
命名空间的作用:避免不同应用中的路由使用了相同的名字发生冲突,使用命名空间区别开。
2) 在定义普通路由时,可以使用name参数指明路由的名字,如

urlpatterns = [
    url(r'^index/$', views.index, name='index'),
    url(r'^say', views.say, name='say'),
]

reverse反解析
作用:1 生成路由地址规范
2 不修改引用路由地址的代码

使用reverse函数,可以根据路由名称,返回具体的路径,如:

from django.urls import reverse  # 注意导包路径

def index(request):
    return HttpResponse("hello the world!")

def say(request):
    url = reverse('users:index')  # 返回 /users/index/
    print(url)
    return HttpResponse('say')

对于未指明namespace的,reverse(路由name)
对于指明namespace的,reverse(命名空间namespace:路由name)
路径结尾斜线/的说明
Django中定义路由时,通常以斜线/结尾,其好处是用户访问不以斜线/结尾的相同路径时,Django会把用户重定向到以斜线/结尾的路径上,而不会返回404不存在。如
urlpatterns = [
url(r’^index/$’, views.index, name=‘index’),
]

用户访问 index 或者 index/ 网址,均能访问到index视图。
说明:
虽然路由结尾带/能带来上述好处,但是却违背了HTTP中URL表示资源位置路径的设计理念。
是否结尾带/以所属公司定义风格为准。

请求

回想一下,利用HTTP协议向服务器传参有几种途径?
提取URL的特定部分,如/weather/beijing/2018,可以在服务器端的路由中用正则表达式截取;
查询字符串(query string),形如key1=value1&key2=value2;
请求体(body)中发送的数据,比如表单数据、json、xml;
在http报文的头(header)中。
URL路径参数

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_36171645/article/details/90948223