Django基础知识(一)
创建django项目
terminal命令:
#创建Django程序
django-admin startproject mysite
#进入程序目录
cd mysite
#启动socket服务端,等待用户发送请求
python manage.py runserver 8000
Django程序目录:
mysite
mysite
-settings.py #Django配置文件
-url.py #路由系统:url->函数
-wsgi.py #用于定义Django用socket,wsqiref,uwsgi
manage.py #对当前Django程序所有操作可以基于python manage.py runserver
URL和视图函数
URL
-
定义:统一资源定位符Uniform Resource Locator
-
语法:(注:[]代表其中内容可省略]
protocol://hostname[:port]/path[?query]][#fragment]
e.g.http://tts/tmooc.cn/video/showViedo?menuld=657421&version=AID999#subject
-
protocol(协议):http://
- http通过HTTP访问该资源。格式:http://
- https通过安全的HTTPS访问该资源。格式https://
-
file资源是本地计算机上的文件。格式:file:///
-
hostname(主机名)tts.tmooc.cn
是指存放资源的服务器的域名系统(DNS)主机名、域名或IP地址
-
port(端口号)80
- 整数,可选,省略时使用方案的默认端口
- 各种传输协议都有默认的端口号,如http的默认端口为80
-
path(路由地址)video/showViedo
- 由零或多个"/"符号隔开的字符串,一般用来表示主机上的一个目录或文件地址。
- 路由地址决定了服务器端如何处理这个请求
-
query(查询)?menuld=657421&version=AID999
- 可选,用于给动态网络传递参数,可有多个参数,用”&“符号隔开,每个参数的名和值用’=‘符号隔开的字符串,一般用来表示主机上的一个目录或文件地址
- 路由地址决定了服务器端如何处理这个请求
-
fragment(信息片段)#subject
- 字符串,用于指定网络资源中的片段。如一个网页中有多个名词解释,可使用
- fragment直接定位到某一名词解释。
-
-
django如何处理URL请求
e.g.浏览器 地址栏 - > http://127.0.0.1:8000/page/2003/- Django从配置文件中根据Root URLCONF找到主路由文件;默认情况下,该文件在项目
- 同名目录下的urls;例如mysite1/mysite1/urls.py
- Django加载主路由文件中的urlpatterns变量[包含很多路由的数组]
- 依次匹配urlpatterns中的path,匹配到第一个合适的中断后续匹配
- 匹配成功-调用对应的视图函数处理请求,返回响应
- 匹配失败-返回404响应
视图函数:
-
定义:视图函数是用于接收一个浏览器请求(HttpRequest对象)并通过HttpResponse对象返回响应的函数。此函数可以接收浏览器请求并根据业务逻辑返回相应的响应内容给浏览器
-
语法:
def xxx_view(request[,其它参数...]): return HttpResponse对象;
路由配置
path函数:
-
导入:
from django.urls import path
-
语法:
path(route,views,name=None)
-
参数:
- route:字符串类型,匹配的请求路径
- views:指定路径所对应的视图处理函数的名称
- name:为地址起别名,在模块中地址反向解析时使用
path转换器:
-
语法:
<转换器类型:自定义名>
-
作用:若转换器类型匹配到对应类型的数据,则将数据按照关键字传参的方式传递给视图函数
path('page/<int:page>',views.xxx)
-
转换器类型:
- str:匹配除了’/'之外的非空字符串
- int:匹配0或者任何正整数,返回一个int
- slug:匹配任意由ASCII字母或数字以及连字符和下划线组成的短标签(e.g. this-is-jango)
- path:匹配非空字段,包括路径分隔符‘/’
-
re_path()函数:
-
作用:在url的匹配过程中可以使用正则表达式进行精确匹配
-
语法:
re_path(reg,view,name=xxx)
正则表达式为命名分组模式(?<name>pattern)
;匹配提取参数后用关键字传参方式传递给视图函数
re_path(r'^(?P<x>\d{1,2})/(?P<op>\w+)/(?P<y>\d{1,2})$',views.cal2_view)
-