Django基础
#Django
一.软件框架
一个软件框架是有期中各个软件模块组成的,每一个模块都有特定功能,模块与模块之间通过相互配合来完成软件开发。
二.MVC框架
MVC的核心思想:解耦
MVC框架里面的三个模块:
- M:Model模型,和数据库进行交互。
- V:View视图,产生HTML页面。
- C:Controller控制器,接收请求,进行处理,与M和V进行交互,返回应答。
三.MVT
- M:Model模型。和MVC中的M功能相同,和数据库进行交互。
- V:View视图。和MVC中C功能相同,接收请求,进行处理,与M和T进行交互,返回应答。
- T:Template,模板。和MVC中V功能相同,产生HTML页面。
四:虚拟环境
点击查看:Django网站www.djangoproject.com
点击查看:Django1.8.2中文文档www.python.usyiyi.cn
之前安装的Python包的命令:sudo pip3 install 包名
包的安装路径: /usr/local/lib/python3.5.0/dist-packages
安装同一个包不同版本,后安装的包会把原来安装的包覆盖掉。这样,如同一台机器上两个项目依赖于相同包的不同版本,则会导致一些项目运行失败。
解决方案就是:虚拟环境
虚拟环境就是Phthon环境的复制版本。
在虚拟环境中使用的Python是复制的Python安装Python包也是安装在复制的Python中。
安装虚拟环境的命令:
安装虚拟环境所需要的包
1 | sudo pip install virtialenv //安装虚拟环境 |
在主目录下边编辑配置文件
1 | 编辑家目录下面的 |
创建虚拟环境
1 | makvirtualenv //创建虚拟环境 |
退出虚拟环境
1 | deactivate //退出虚拟环境 |
进入虚拟环境
1 | workon //进入虚拟环境 |
查看机器上有多少个虚拟环境
1 | 输入 workon 加上 空格 和两个 Tab |
删除虚拟环境
1 | rmvirtualenv 加上 需要删除虚拟环境的名字 |
查看当前虚拟环境下面安装了多少Python包
1 | pip list |
安装指定版本的包
1 | pip install django==2.0.4 |
五:项目创建
命令
1 | django-admin startproject 项目名 |
1.目录结构
1 | __init__.py //说着这个文件是一个python包 |
2.创建应用
1 | python manage.py startapp booktest |
应用文件下面的文件作用
1
2
3
4
5__init__.py //说明目录是一个Python模块
models.py //写和数据库相关的内容
views.py //接受请求、进行处理、与M和T进行交互、返回应答.定义处理函数(视图函数)
tests.py //写测试代码的文件
admin.py //网站后台管理相关的文件
建立应用和项目之间的连续,需要对应用进行注册
1 | 项目名————>settings.py --↓ |
- 启动项目
1 | python manage.py runserver |
六.ORM
ORM 可以通过类和对象去操作他对应的表,不需要sql语句。
1 | Object:对象 - 类 |
models.py //这个文件的作用是 设计和表对应的类,模型类
七.模型类
1.模型类设计
在应用models.py 中设计模型类。
必须继承与models.Model类
Models.ForeignKey可以建立两个模型之间一对多的关系,Django在成功生成表的时候,就会在表中管创建一列作为外键,建立两个表之间一对多的关系。
2.模型类生成表
生成迁移文件
命令:
1
python manage.py makemigrations
迁移文件是根据模型类生成的
执行迁移生成表
1
python manage.py migrate
migrate 里面的迁移文件不能删,因为每次迁移都有依赖关系
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19C:\Users\Administrator\Desktop\Django>python manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, booktest, contenttypes, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying booktest.0001_initial... OK
Applying sessions.0001_initial... OK //这是对他来执行的迁移文件Django 默认使用的数据库是 sqlite3 的数据库
1
2- sqlite3 是一个关系型数据库
- 也是一个小型数据库经常用在移动端,手机端
3.通过模型类操作数据表
实例实行和例属性不是一种
通过shell操作数据表:
1 | python manage.py shell //进入shell命令 |
八.后台管理
本地化
语言和时区的本地化
1
2LANGUAGE_CODE='zh-hans'
TIME_ZONE='Asia/Shanghai' //这里面没有背景时间,只有亚洲上海的时间修改setting.py文件
创建管理员
命令:
1
python manage.py createsuperuser
注册模型类
- 在应用下的admin.py 中注册模型类
- 告诉Django框架根据注册的模型类来生成对表管理页面
- 进入admin后如果想直接显示name可以:
1
2def __str__(self):
return self.name //返回表的name字段
自定义管理页面
自定义模型管理类。模型管理类就是告诉Django再生产管理页面上显示那些内容
1
2
3
4
5
6
7
8
9
10
11
12from django.contrib import admin
from .import models
#自定义模型管理类
class BookInfoAdmin(admin.ModelAdmin):
'''图书模型管理类'''
list_display = ['id','btitle','bpub_date']
#第二个参数放模型管理类的类名
admin.site.register(models.BookInfo,BookInfoAdmin)
admin.site.register(models.Studeng)
admin.site.register(models.HeroInfo)
九.视图
在Django中,通过浏览器去请求一个页面时,使用视图函数来处理这个请求的视图函数处理之后,要给浏览器返回页面内容。
1.视图函数的使用(仅供参考)
- 定义视图函数
视图函数定义在views.py中。
1
2
3
4
5
6
7
8
9
10from django.shortcuts import render
from django.http import HttpResponse
#Create your views here.
#1.定义视图函数,HttpResponse
#2.进行url配置,建立url地址和视图的对应关系
#http://127.0.0.1:8000/index
def index(request):
#进行处理 ,和M和T进行交互
return HttpResponse('hello python')视图函数必须有一个 request ,进行处理之后,需要返回一个HttpResponse的类对象,Hello python 就是返回给浏览器的内容
####- 进行url配置
- 所有的url配置都定义一个叫做urlpattems的列表中
- 每一个配置都会调用url函数第一个参数是正则表达式,第二个参数是对应的处理动作,可以写一个视图函数的名字。
- 和url 字符串进行正则匹配,匹配成功则执行后面响应的动作。
- 对应的动作可以是一个视图函数的名字,也可以是包含一个应用的urls.py文件
url 配置的目的是让建立url和视图函数的对应关系,url配置定义在urlpatterns的列表中,每一个配置项都调用url函数。
主路由
1
2
3
4
5
6
7
8from django.contrib import admin //主路由文件的admin管理员
from django.urls import path,re_path,include //include 是命名子路由用的
urlpatterns = [
path('admin/', admin.site.urls),
path('',include('booktest.urls')) //定义子路由 (应用名字+子路由文件)
]子路由
1
2
3
4
5
6
7
8
9
10from django.conf.urls import url
from django.urls import path,re_path
from .import views
urlpatterns = [
path('index/', views.index),
path('',views.index),
url(r'^index/$',views.index),
re_path(r'index',views.index),
]
url函数有两个参数,第一个是一个正则表达式,第二个是对应的处理动作。
配置url时候有两种语法格式:
url(正则表达式,视图函数名)
url(正则表达式,include(应用中的urls文件))
工作中配置url时,首先在项目的ulrs.py 文件中添加配置项是,并不写具体的url和视图函数之间的对应关系,而是包含具体应用的urls.py 文件,在应用的urls.py文件中写 url 和视图函数的对应关系。
2.url匹配过程 (正则)
在项目的urls.py 文件中包含具体应用的urls.py文件,应用的urls.py文件中写url和视图函数的对应关系。
十.模板
模板不仅仅是一个HTML文件,
- 可以在里面定义变量。
- 还可以写类似于编程语言的语句。
1.模板的使用
创建模板文件夹 template
配置模板目录
项目的setting.py里面有一个TEMPLATES配置项
配置文件里面有一个常量
1
2#项目目录的绝对路径,项目不论放到哪个目录下面都能通过BASE_DIR把它的绝对路径拿到
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))设置的时候我们就可以把我们的 BASE_DIR和tmplate拼接一下就可以了
拼接的时候要使用os.path.json(BASE_DIR,’template’)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')], //设置模板文件目录
'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',
],
},
},
]使用模板文件 ps:老款的
加载模板文件
去模板目录下面获取html的内容,得到一个模板对象
定义模板上下文
向模板文件传递数据
模板渲染
得到一个标准的html内容
1
2
3
4
5
6
7
8
9
10
11
12
13from django.template import loader,RequestContext
from django.http import HttpResponse
def index2(request):
'''使用模板'''
# 1.加载模板文件,模板对象
temp = loader.get_template('booktest/index2.html')
# 2.定义模板上下文:给模板传递数据
context = RequestContext(request,{})
# 3.模板渲染:产生标准的HTML内容
res_html = temp.render(context)
# 4.返回给浏览器
return HttpResponse(res_html)定义一个方法提供模板复用 //其实这个函数封装是多余的 ,Django给我们封装了render直接使用就行了
1
2
3
4
5
6
7
8
9
10
11
12
13from django.template import loader,RequestContext
from django.http import HttpResponse
def my_render(request,template_path,context_dict):
'''使用模板文件'''
# 1.加载模板文件,模板对象
temp = loader.get_template(template_path)
# 2.定义模板上下文:给模板传递数据
context = RequestContext(request,context_dict)
# 3.模板渲染:产生标准的HTML内容
res_html = temp.render(context)
# 4.返回给浏览器
return HttpResponse(res_html)
2.给模板文件传递数据
模板变量使用:
1
{{ 模板变量名 }}
for循环
1
2
3{% for i in list %}
{{ i }}
{% endfor %}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 jaytp@qq.com