一、pycharm 打开项目
1.打开工程
2.配置环境
3.即可启动服务
二、工程目录
demo 项目主目录
__init__.py 项目主目录的初始化文件
settings.py 项目的配置文件
urls.py 路由文件
wsgi.py 项目的部署文件
db.sqlite3 数据库文件
manage.py 项目的管理文件,负责在开发模式下项目的控制,项目启动,数据库的同步
三、配置文件的介绍
"""
Django settings for demo project.
Generated by 'django-admin startproject' using Django 2.2.1.
For more information on this file, see
https://docs.djangoproject.com/en/2.2/topics/settings/
For the full list of settings and their values, see
https://docs.djangoproject.com/en/2.2/ref/settings/
"""
import os
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
# 项目的根目录,方便开发人员使用
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# print(BASE_DIR)
# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/2.2/howto/deployment/checklist/
# SECURITY WARNING: keep the secret key used in production secret!
# 密钥
SECRET_KEY = 'x#ut-mtp6s=3qa)g$v2id(p8#fr!&z^tslwa&7b$ien0dy7fs('
# SECURITY WARNING: don't run with debug turned on in production!
# debug 模式 True 开启debug模式
DEBUG = True
# python manage.py runserver 0.0.0.0:8000
ALLOWED_HOSTS = []
# 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 = 'demo.urls'
# 模版设置
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 = 'demo.wsgi.application'
# Database
# https://docs.djangoproject.com/en/2.2/ref/settings/#databases
# 数据库
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
# Password validation
# https://docs.djangoproject.com/en/2.2/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/2.2/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/2.2/howto/static-files/
# 静态文件的配置
STATIC_URL = '/static/'
四、编写简单页面
hello world
1.配置路由文件
路由:分配任务,将指定的请求,分配到指定的函数处理。
path(“路径”,处理的函数)
2.在demo文件中新建一个views.py文件
3.编写views.py文件
视图
空路径访问时会出现以下页面是因为,添加了新的路由,并且settings.py配置文件中设置了DEBUG=True。如果将它改为DUBUG=False,Django将会显示标准的404页面。
排错
五、设计模式
Django是一个MVT模式,同时遵循MVC模式。
- M:model,提供数据的支持,封装了数据库的访问,负责对数据库的增删改查。
- C: controller,控制器,用于接受请求,处理业务逻辑,与model和view进行交互,返回结果。
- V:view,用与封装结果,生成页面和html内容。
- M:model,提供数据的支持,封装了数据库的访问,负责对数据库的增删改查。
- V:view,与MVC中C相似,接受请求,处理请求,返回响应。
- T:和MVC中的V相似,负责封装结果,提供html页面支持。
六、正则表达式
'''
正则表达式:是一种字符串的处理方式,用于字符串的匹配
字符串的匹配有两种:
内容匹配:python re
通过描述要匹配的内容和数量来实现匹配
结构匹配:xpath
通过描述要匹配的内容在整体中的结构来实现匹配
'''
import re
string='hello \n \t world 12h33 _ _'
# 格式:res=re.findall('正则表达式',字符串)
'''
类型匹配
'''
# . 除\n之外的所有内容
# res = re.findall('.',string)
# print(res)
# \d 匹配数字
# res = re.findall('\d\d\d',string)
# print(res)
# \D 非数字
# res = re.findall('\D',string)
# print(res)
# \w 匹配数字字母_
# res = re.findall('\w',string)
# print(res)
# \W 除数字字母_
# res = re.findall('\W',string)
# print(res)
# [] 返回括号中的任意一个字符
# res = re.findall('[a-zA-Z0-9]',string)
# print(res)
# 取反
# res = re.findall('[^a-zA-Z0-9]',string)
# print(res)
# | 匹配任意一边的字符
# res = re.findall('[hello|world]',string)
# print(res)
# () 组匹配
# 匹配两个数字
# res = re.findall('\d\d',string)
# print(res) # ['12', '34']
# 匹配一个后面有数字的数字(分组后面的是条件)
# res = re.findall('(\d)\d',string)
# print(res) # ['1', '3']
# res = re.findall('(\d)',string)
# print(res)
# 给分组写一个祖名id,实际内容完全相同
# res = re.findall('(?P<id>\d)',string)
# print(res)
# (?P=id)是对前面组名id匹配结果的引用
# res = re.findall('(?P<id>\d)(?P=id)',string)
# print(res)
'''
原样匹配
'''
# res = re.findall('l',string)
# print(res)
'''
长度匹配
'''
# * 匹配0个或多个数字,贪婪
# res = re.findall('\d*',string)
# print(res)
# + 匹配1个或多个数字,贪婪
# res = re.findall('\d+',string)
# print(res)
# {} 匹配指定次数
# res = re.findall('\d{2}',string)
# print(res)
# res = re.findall('\d{0,2}',string)
# print(res)
# ? 匹配0个或1个,禁止贪婪
# res = re.findall('\d?',string)
# print(res)
'''
特殊匹配
'''
# ^ 匹配开头
res = re.findall('^\w',string)
print(res)
# $ 匹配结尾
res = re.findall('\w$',string)
print(res)
七、路由的匹配规则
从上到下
Django 在1.8版本之前,默认使用正则表达式进行匹配。
使用正则表达式进行匹配时
- 导包 re_path
3. 使用正则分组进行组匹配
- ()
- 使用()组匹配写路由的时候,相当于给视图进行传参
路由
视图
使用组匹配,可以通过起组名,避免参数位置不对是出现的问题