Django项目创建
-
项目创建
django-admin startproject mydemo
-
项目结构
-
树形结构
$ cd mydemo/ $ tree . |-- mydemo | |-- __init__.py | |-- asgi.py | |-- settings.py | |-- urls.py | |-- wsgi.py |-- manage.py
-
结构图
-
目录说明:
- HelloWorld: 项目的容器。
- manage.py: 一个实用的命令行工具,可让你以各种方式与该 Django 项目进行交互。
- HelloWorld/init.py: 一个空文件,告诉 Python 该目录是一个 Python 包。
- HelloWorld/asgi.py: 一个 ASGI 兼容的 Web 服务器的入口,以便运行你的项目。
- HelloWorld/settings.py: 该 Django 项目的设置/配置。
- HelloWorld/urls.py: 该 Django 项目的 URL 声明; 一份由 Django 驱动的网站"目录"。
- HelloWorld/wsgi.py: 一个 WSGI 兼容的 Web 服务器的入口,以便运行你的项目。
-
-
settings.py 文件
""" Django settings for mydemo project. Generated by 'django-admin startproject' using Django 3.1.7.《django版本》 For more information on this file, see <https://docs.djangoproject.com/en/3.1/topics/settings/> For the full list of settings and their values, see <https://docs.djangoproject.com/en/3.1/ref/settings/> """ from pathlib import Path # Build paths inside the project like this: BASE_DIR / 'subdir' BASE_DIR = Path(__file__).resolve().parent.parent """《显示当前项目根目录》""" # Quick-start development settings - unsuitable for production # See <https://docs.djangoproject.com/en/3.1/howto/deployment/checklist/> # SECURITY WARNING: keep the secret key used in production secret SECRET_KEY = 'jb^(bip2g_@%r*5ni-8@#yz%*crzw7sqpq_qcbhw48lgk+ctxo' # SECURITY WARNING: don't run with debug turned on in production DEBUG = True """ 调试模式开关,默认为True(调试模式) 为True时:1.检测代码改动后立刻重启服务;2.显示报错页面 为False时(正式启动模式/上线模式):项目上线时一定要更改为False """ ALLOWED_HOSTS = [] """ 允许的域名,只有列表中添加的域名可以访问服务器,默认会允许127.0.0.1或者localhost访问 设置为"*":表示允许所有域名访问 设置当前局域网内域名可进行访问: 1.项目启动时设置:python manage.py runserver 0.0.0.0:8000 2.添加局域网IP """ # Application definition INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', ] 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', ] ROOT_URLCONF = 'mydemo.urls' """ 项目主路由位置,默认为项目文件夹下的urls.py """ TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], '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_APPLICATION = 'mydemo.wsgi.application' # Database # <https://docs.djangoproject.com/en/3.1/ref/settings/#databases> DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': BASE_DIR / 'db.sqlite3', } } # Password validation # <https://docs.djangoproject.com/en/3.1/ref/settings/#auth-password-validators> 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', }, ] # Internationalization # <https://docs.djangoproject.com/en/3.1/topics/i18n/> LANGUAGE_CODE = 'en-us' """ 主页语言配置,可设置为中文 LANGUAGE_CODE = 'zh-hans' """ TIME_ZONE = 'UTC' """ 时区设置,主要影响数据库时间显示 TIME_ZONE = 'Asia/shanghai' """ USE_I18N = True USE_L10N = True USE_TZ = True # Static files (CSS, JavaScript, Images) # <https://docs.djangoproject.com/en/3.1/howto/static-files/> STATIC_URL = '/static/' """ 静态文件路由 """
-
URL
-
URL 结构:protocol://hostname[:port]/path[?query][#fragment]
-
protocol(协议):
- http:通过http访问该资源,格式:http://
- https:通过安全的https:访问该资源,格式:https://
- file:通过file访问本地的资源,格式:file:///
-
hostname(主机名/域名):
- 是指存放资源的服务器的域名系统(DNS)主机名、域名或IP地址
-
port(端口):
- 可选,省略时使用方案的默认端口
- 各种传输协议都有默认的端口号http:默认是80,https:默认是443
-
path(路由地址):
- 由零或多个“/”符号隔开的字符串,一般用来表示主机上的一个目录或文件地址,路由地址决定了服务器端如何处理这个请求
-
query(查询字符串):
- 可选,以“?”开头,用于给动态网页传参,可传递多个参数用“&”隔开,参数名和参数值用等号隔开key=value
-
fragment(信息片段):
- 字符串,以“#”开头,用于指定网络资源中的片段,类似书签,下次访问时带上fragment可直接定位到该片段
-
Django如何处理URL请求
- 根据浏览器传过来的URL,django从配置文件中根据ROOT_URLCONF找到主路由文件;默认情况下该路由文件位于同名目录下的urls.py中
- django加载主路由中的urlpattern变量,urlpattern是一个包含很多路由的列表
- 从上往下依次匹配urlpattern中的path,匹配到第一个满足的path即中断后续匹配
- 匹配成功,调用对应的视图函数处理请求,返回对应的响应
- 匹配失败,返回404响应
-
-
视图函数
-
定义:用于接收浏览器请求( HttpRequest对象),并通过HttpResponse对象返回响应的函数
-
语法:return必须是HttpResponse对象
def demoview(request[,其他参数]): return HttpResponse('需要返回的数据')
-
示例:
在项目同名目录下创建views.pyfrom django.http import HttpResponse def page1_view(requet): html = "<h1>hallo world</h1>" return HttpResponse(html)
-
添加路由url.py
from django.contrib import admin from django.urls import path from . import views urlpatterns = [ path('admin/', admin.site.urls), path('page1/', views.page1_view), ]
-
-
路由配置-path
- path()函数
- 导入
from django.urls import path
- 语法
path(route,views,name=None)
- 参数:
- route:字符串类型,匹配的请求路径
- views:指定路径所对应的视图处理函数的名称
- name:为地址起别名,在模板中进行地址反向解析时使用
- path转换器
- 语法:<转换器类型:自定义名>
- 作用:若转换器类型匹配到对应类型的数据,则将数据按照关键字传参的方式传递给视图函数
- 例:
path('page/<int:page>',views.xxx)
,如果匹配到page路径后面时int类型,则会将接收到的路径中的数据赋值给变量page,然后以关键值传参的方式传递到视图中 -
转换器类型 作用 样例 str 匹配除了‘/’之外的非空字符串 ”v1/users/str:username“匹配/v1/users/china,匹配结果为:username=china int 匹配0和任何正整数,返回一个int ”v1/users/int:num“匹配/v1/users/35,匹配结果为:num=35 slug 匹配任意有ASCII字母或数字以及连字符和下划线组成的短标签 ”v1/users/slug:sl“匹配/v1/users/this_is_django,匹配结果为:sl=this_is_django path 匹配非空字段,包括路径分隔符”/“ ”v1/users/path:ph“匹配/v1/users/goods/a/b/c,匹配结果为:ph=goods/a/b/c
- re_path转换器
- 语法:
re_path(reg,view,name=xxx)
- 正则表达式必须为__命名分组模式__
(?P<name>pattern;)
匹配成功后用关键字传参的方式传递给视图函数
- 正则表达式必须为__命名分组模式__
- 作用:使用正则进行精确匹配
- 例:
url(r'^weather/(?P<city>[a-z]+)(?P<year>\d{4})/$', views.weather)
- 语法: