欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Django day01

程序员文章站 2022-06-08 13:18:10
...

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

Django day01
服务器程序:
主要就是接收http报文,进行解析
框架程序:
根据解析好的报文,进行处理,实现业务处理(视图)
中间层:

2.Django

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

MVT模式:

模型 数据库 模板
Django day01

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

mvc模式说明:

Django day01

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

工程搭建:

1.环境的安装:

安装虚拟环境,

mkvirtualenv django_py3_1.11 -p python3

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

创建工程:

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

django-admin startproject 工程名称

工程目录的结构:

Django day01

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 子应用名称

子项目结构

Django day01
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.路由
Django day01
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路径参数

Django day01