DJango第一,二节课

  • 创建虚拟环境:mkvirtualenv -p python3 虚拟环境名称
  • 使用虚拟环境:workon (后加虚拟环境名称进入对应环境不输入列出所有虚拟环境)
  • 退出虚拟环境:deactivate
  • 删除虚拟环境:rmvirtualenv 虚拟环境名称,先退出然后删除
  • 安装工具包:pip install + 工具包
  • 查看环境中的包 pip list
  • 创建django项目:django-admin startproject name
  • 创建子应用: python manager.py startapp name
  • 注册安装子应用的方法 将子应用的配置信息文件apps.py中的Config类添加到INSTALLED_APPS列表中
    • 例:将刚创建的book子应用添加到工程中,可在INSTALLED_APPS列表中添加'book.apps.BookConfig
settings.py是项目的整体配置文件。

urls.py是项目的URL配置文件。
作用:(是Django所支撑网站的目录。它的本质是URL模式以及要为该URL模式调用的视图函数之间的映射表。以这样的方式告诉Django,对于那个URL调用那段代码。url的加载就是从配置文件中开始
)
1.urlpatterns 是固定的写法,它的值是列表
2.我们在浏览器中输入的路径会和urlpatterns 中的每一项顺序进行匹配
如果匹配成功,则直接引导到响应的模块,
如果匹配不成功,则返回404

3.urlpatterns中的元素,就是url
4.协议,ip和端口,参数不参与匹配

子应用中创建一个urls.py
from django.conf import url
from book.views import index
url中的第一个参数就是:正则
第二个参数函数名
urlpatterns=[
url(r'^index/$',views.index)
]




wsgi.py是项目与WSGI兼容的Web服务器入口。

manage.py是项目管理文件,通过它管理项目。

 

 

 

django 是python web开发的一个框架

web应用程序

框架:

  1.搭建web应用程序

  2.只需要关心web应用核心的业务逻辑代码

web应用程序本质是?:

  1.接收http请求获取具体的请求参数

  2.处理本次请求,完成业务逻辑

  3.返回响应数据

 

软件开发模式:

mvc

m:model 模型:封装对数据库的访问,增删改查

v:view 视图:封装结果,生成页面展示内容

c: controller :控制 :接收请求,处理业务,和model和view进行交互,返回结果

 

 

 

 

mvt

m:  model 模型:封装对数据库的访问,增删改查

v:   view 视图:和mvc中的c功能相同,接收请求,处理业务,和model和t进行交互,返回结果

t:    template: 模板:和mvc中的v功能相同发热者构造要返回的html

 

 

 

 

 

1.不操作数据库

2.操作数据库

 

软件准备:

1.pycharm

2.linux (wsl 虚拟机+乌班图)

 

windows

linux

macos

操作系统必须要安装一台机器中

虚拟机:软件(模拟一台机器)-->centos 乌班图

云服务器(机器)

 

虚拟环境:

在实际开发过程中,根据需求回去下载各种相对应的版本或者框架

场景:

项目A 需要框架1.0版本,项目B需要2.0版本

项目用python2.7环境 需要让他在python3.6以上版本进行运行

 

创建项目

进入乌班图终端
# 查看虚拟环境版本
virtualenv --version
# 查看当前虚拟环境下安装了哪些包或者框架 pip list # 安装django
pip install django==3.2 # 创建django_demo文件夹保存django代码 mkdir django_demo # 进入文件夹内 cd django_demo # 创建django项目,项目名字叫demo django-admin startproject demo # 运行manage.py 启动项目 python manage.py runserver django默认的端口号是8000 访问: 127.0.0.1:8000

 

子应用.

admin.py文件跟网站的后台管理站点配置相关

apps.py文件用于配置当前子应用的相关信息

migrations目录用于存放数据库迁移历史文件

models.py文件用户保存数据库模型类

tests.py文件用于开发测试用例,编写单元测试

views.py文件用于编写Web应用视图

工程配置文件settings.py中,INSTALLED_APPS项保存了工程中已经注册安装的子应用

 

 

 

 

 django默认工作在调式Debug模式下,如果增加、修改、删除文件,服务器会自动重启。 按ctrl+c停止服务器

  

  • 运行:python manage.py runserver ip:端口

  • python manage.py runserver

##### 1.url介绍和特点以及概念

##### 2编写视图

##### 3.include()方法的使用

##### 4.使用模板的步骤

##### 5.对模板进行渲染

##### 6.render()方法的使用

##### 7.模板变量的介绍和使用

##### 8.过滤器的介绍和使用

##### 9.自动转义的介绍

##### 10.静态文件的使用

 

str,匹配除了路径分隔符(/)之外的非空字符串,这是默认的形式
int,匹配正整数,包含0。
slug,匹配字母、数字以及横杠、下划线组成的字符串。
uuid,匹配格式化的uuid,如075194d3-6885-417e-a8a8-6c931e272f00。
path,匹配任何非空字符串,包含了路径分隔符

 

一个project有一个总的urls.py各个app也可以自己建立自己的urls.py用include()函数在project的urls.py文件进行注册

项目目录下的主urls.py
from django.contrib import admin

from django.urls import path,include

from . import views
urlpatterns =[
path('admin /' , admin.site.urls),

path('book/ ,include('book.urls')),

]

  

 

创建项目结构

 

# __init__.py:初始化文件 区分到底是包还是文件夹
# asgi.py 和 wsgi.py  asgi.py是django3新加的djangoweb服务器网关接口是awsgi 目前不用
# settings.py 全局配置文件
# views.py 视图处理文件
# urls.py 路由配置文件

 

 

 

 

全局配置文件settings.py
 
# 全局配置文件
from pathlib import Path
# 变量:保存数据,可以变化

# 常量:不变的数据
# 项目的路径
BASE_DIR = Path(__file__).resolve().parent.parent

# 秘钥 对生产中使用的密钥保密
SECRET_KEY = 'django-insecure-8n69f^e$)#cx_fv^ye!a*e@4oqz6-l(@2zu4s+m3b46w#&4njn'
# 1.开发环境
# 2.测试环境
# 3.演示环境
# 4.生产环境

# 生产环境必须要把debug设置为false,开发环境可以为true 更好调试
DEBUG = True

# 设置允许访问的主机ip地址,*是通配符,代表所有人可访问。
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
# 数据库配置
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

# 密码认证器
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.2/topics/i18n/
# 语言设置 设置中文
LANGUAGE_CODE = 'zh-hans'
# 设置中国时区
TIME_ZONE = 'Asia/Shanghai'

USE_I18N = True

USE_L10N = True

USE_TZ = True


# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/3.2/howto/static-files/

STATIC_URL = '/static/'

# Default primary key field type
# https://docs.djangoproject.com/en/3.2/ref/settings/#default-auto-field

DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
 

 

 

 

 

创建子应用
创建子应用的目的:
     项目由各个功能组合而来,会对功能进行区分,所以一般一个功能对应一个子应用
        

  

django-admin startapp 子应用名字 
或者使用
进入manage.py所在文件目录下通过:
python manage.py startapp 子应用名字

  

 

 

 

# migrations 包: 数据迁移包 以后会生成数据迁移中间文件
# admin.py 有关后台管理的文件
# apps.py 有关子应用文件配置
# models.py 模型文件 和数据库操作有关
# tests.py 单元测试文件
# urls.py 自己创建的,保存子应用路由
# views.py 路由对应视图操作文件

 

 

url路由

path函数
# urls.py
from django.urls import path
urlpatterns = [
    # 第一个参数是字符串类型 对应一个请求路径
    # 第二个参数指定路径对应的视图函数名
    path('index/',the_2_hello),]


# views.py
def the_2_hello(request):
	# 响应
    return HttpResponse('这是the_2 hello')

  

如果想要访问子应用中的某一个路由 必须要在主应用中引入子应用路由文件

# demo/urls.py
# 根路由文件
urlpatterns = [
    path('admin/', admin.site.urls),
    path('hello/',hello),
    # 想要访问子应用,必须要在根路由文件中引入
    path('the_2/',include('the_2.urls')),
]

 

 

访问index 通过

# 127.0.0.1:端口号/the_2/index/

地址由三部分组成:
1.  / :找到主应用的urls.py
2.  the_2/ :找到主应用urls.py中配置的the_2
3.  index/ :找到the_2/urls.py中的index

 

 

 

转换器

用来匹配url中的变量

# the_2/ urls.py
from the_2.views import the_2_hello,convert1_name
path('convert1/<name>', convert1_name),  
# 会把这个name传入到视图函数中 

# the_2/views.py 
def convert1_name(request,name):
    # 视图函数中需要定义一模一样的名字才可以接收到参数 
    return HttpResponse('浏览器地址栏的name是{}'.format(name))
# http://127.0.0.1:8000/the_2/convert1/coco 

因为django底层内部调用的是
convert1_name(request,name='coco')
根据关键字参数传参,如果和url中的变量名不一致就会报错。
# the_2/ urls.py
from the_2.views import the_2_hello,convert2_money
path('convert2/<int:money>', convert2_money),
# 限制参数必须要是int类型,只能是整数,并且后端接收到的数据类型也是int类型

# the_2/views.py 定义视图函数
def convert2_money(request,money):
    return HttpResponse('浏览器地址栏的money是{}'.format(money))

# http://127.0.0.1:8000/the_2/convert2/123

 

 

path可以传四个参数,前两个参数是必传的,后两个参数是选传的

 

# kwargs参数

# the_2/ urls.py
from the_2.views import the_2_hello,convert2_money,kw_test
path('kw_test', kw_test,kwargs={'language':'python'}),

# the_2/views.py 
def kw_test(request,language):
    return HttpResponse("language----{}".format(language))

# http://127.0.0.1:8000/the_2/kw_test
# 内部调用是kw_test(request,language='python')

 

 

# the_2/ urls.py
from the_2.views import the_2_hello,convert2_money,kw_test,kw_test2
path('kw_test2', kw_test2,kwargs={'language':'python','teacher':'coco'}),

# the_2/views.py 
def kw_test2(request,kw):
    return HttpResponse("kw----{}".format(kw))

# http://127.0.0.1:8000/the_2/kw_test2
# 报错因为
# 内部是这样调用的kw_test2(request,language='python',teacher='coco')
# 所以在kw_test2函数中必须要用不定长参数

def kw_test2(request,**kwargs):
     return HttpResponse("kw----{}".format(kwargs))

 

 

# name参数

# the_2/ urls.py
from the_2.views import the_2_hello,convert2_money,kw_test,kw_test2,name_test
# 加上name参数
path('name_test', name_test,name='hello_name'),

# the_2/views.py 
from django.shortcuts import reverse
def name_test(request):
    return HttpResponse("name_test的路由是:{}".format(reverse('hello_name')))

# http://127.0.0.1:8000/the_2/name_test
# reverse('hello_name')返回的是/the_2/name_test 这样一个字符串 因为name_test这个单独取了个名字是hello_name 可以根据这个名字逆向的找到路径是什么  所以这是name参数的作用:给路由取了个别名 

 

 

posted on 2022-01-11 02:51  不辜负这每寸美好时光  阅读(52)  评论(0)    收藏  举报