DJango第一,二节课
-
-
使用虚拟环境:workon (后加虚拟环境名称进入对应环境不输入列出所有虚拟环境)
-
退出虚拟环境:deactivate
-
删除虚拟环境:rmvirtualenv 虚拟环境名称,先退出然后删除
-
安装工具包:pip install + 工具包
-
查看环境中的包 pip list
-
创建django项目:django-admin startproject name
-
创建子应用: python manager.py startapp name
-
注册安装子应用的方法 将子应用的配置信息文件apps.py中的Config类添加到INSTALLED_APPS列表中
-
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

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项保存了工程中已经注册安装的子应用

##### 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 路由配置文件
# 全局配置文件 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
转换器
# 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) 收藏 举报

浙公网安备 33010602011771号