概念
什么是框架?
框架的特点
python中常见的框架
Web框架中的概念
MVC
-大部分开发语言中都有MVC框架
-MVC框架的核心思想是:解耦
-降低各种功能模块之间的耦合性,方便变更,更容易重构代码,最大程度上实现代码的重用
-m表示model,主要用于对数据库层的封装
-v表示view,用于向用户展示结果
-c表示controller,是核心,用于处理请求、获取数据、返回结果
MVT
-Django是一款python的Web开发框架
-与MVC有所不同,属于MVT框架
-m表示model,负责与数据交互
-v表示view,是核心,负责接收请求、获取数据、返回结果
-t表示template,负责呈现内容到浏览器
Django框架的介绍
Django框架
快速开发:Django的宗旨在于帮助开发人员快速从概念到完成应用程序
安全可靠:Django认真对待安全性,帮助开发人员避免许多觉的安全错误
超可伸缩性:Web上的一些最繁忙的网站利用了Django快速灵活扩展的能力
安装
win10 cmd命令安装
pip install django==1.11.11
检测当前Djang版本
python -m django --version
Django快速入门
项目创建与运行
1.创建项目
cmd命令 django-admin startproject myweb
2.运行开发服务器命令 python manage.py runserver
注:配置 ALLOWED_HOSTS = ['*']
创建应用
与manage.py同一目录下,执行命令
python manage.py startmyapp myapp
编辑视图
文件myapp/views.py中,
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello ,boy!")
这个是Django中最简单的视图,要调用视图,需要将其映射到一个URL,因此我们需要一个URLconf。
此时,在myapp目录中创建一个URLconf,在myapp/urls.py文件中的代码:
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'$',views.index,name = "index"),
]
子由路由有了,还需要配置主路由,以将主路由指向子路由。在myweb/urls.py中配置如下:
from django.conf.urls import include,url
from django.contrib import admin
urlpattern = [
url('r^admin/',admin.site.urls),
url('r^myapp/',include(myapp.urls)),
]
其中include()函数允许引用其他URLconfs。请注意,该include()函数的正则表达式没有$(字符串匹配字符),而是尾部的斜杠。每当Django遇到include(),它会排除与该点分配的任何部分,并将剩余的字符串发送到随附的URLconf进行进一步处理。
现在已经将index视图连接到URLconf中,现在去验证它一下,cmd中命令:python manage.py runserver 0:8000
可在浏览器中,地址:localhost:8000/myapp/(前面附上http://),观察效果。“Hello ,boy!”
项目的模型
连接MySWL数据库的配置
默认情况下,配置使用SQLite。若不使用SQLite作为数据库,则需要额外的设置,例如USER,PASSWORD和HOST必须加入。
其中ENGINE设置为数据库后端使用。内置数据库后端有:
'django.db.backends.postgresql'
'django.db.backends.mysql'
'django.db.backends.sqlite3'
'django.db.backends.oracle'
在myweb/setting.py中,配置DATABASES
DATABASES = {
‘ENGINE’:'django.db.backends.mysql',
'NAME':'mydemo',
'USER':'root',
'PASSWORD':'',
'HOST':'localhost',
'PORT':'3306',
}
注:Django使用MYSQL数据库需要安装PyMySQL,命令如下:
pip install pymysql
在myweb/__init__.py
中:
import pymysql
pymysql.install_as_MySQLdb()
创建模型
在咱们简单的应用程序中,去创建一个stu表信息操作的Model类。
在maapp/models.py文件中
from django.db import models
class Stu(model.Model):
'''自定义Stu表对应的Model类'''
#定义属性:默认主键自增id字段可不写
#id = models.AutoField(primary_key=True)
name = models.CharField(max_length=16)
age = models.SmallIntegerField()
sex = models.ChaiField(max_length=1)
classid = models.CharField(max_length=8)
#定义默认输出格式
def __str__(self):
return "%d:%s:%d:%s:%s"%(self.id,self.name,self.age,self.sex,self.classid)
#自定义对应的表名,默认表名:myapp_stu
class Meta:
db_table="stu"
激活模型
要将应用程序包括在我们的项目中,我们需要在设置中添加对其配置类的引用INSTALLED_APPS.。
在myweb/settings.py文件中,在INSTALLED_APPS里添加’myapp.apps.MyappConfig’,或者写成‘myapp’
模型的使用
进入交互式Python shell,并使用Django提供的免费API
python manege.py shell
mod = Stu.objects
#获取所有信息
lists = mod.all()
for v in lists:
print(v)
#获取单条信息
mod.get(id=1)
mod.get(id=2)
在myapp应用视图中使用
在文件myapp/views.py中
from django.shortcuts import render
from django.http import HttpResponse
from myapp.models import Stu
def index(request):
return HttpResponse("Hello Django!")
def stu(requtest):
#获取所有stu表信息
lists = Stu.objects.all()
print(lists)
#获取单条学生信息
print(Stu.objects.get(id=1))
return HttpResponse("ok")
配置stu函数的访问路由
在myapp/urls.pyt文件中
url(r'^stu$',views.stu)
启动服务后,可在浏览器中访问,http://localhost:8000/myapp/stu
Model模型
模型是数据的唯一的、权威的信息源。它包含所存储的必要字段和行为。通常每个模型对应数据库中唯一的一张表。
启用网站Admin管理
1.数据迁移; python manage.py mygrate
2.创建管理员账户;
3.启动开发服务器
4.设置时区;
5.将定义的应用程序加入到后台管理 ;
6.深入设置后台管理;
Django的URL路由
一个干净优雅的URL方案是高质量的Web应用程序中的一个重要细节
Django可以让人自己设计URL,无论你想要什么,没有框架限制。
要为应用程序设计URL,可以非正式地的创建一个名为URL(URL配置)的python模块。
这个模块是纯Python代码,是 一个简单的Python模式(简单的正则表达式)到Python函数(视图)之间的映射。
Django是如何处理一个请求的呢?
根路由——查找变量urlpatterns———子路由(Django按 顺序运行每个URL模式,并在匹配所请求的URL的第一个URL中停止)——视图——若没有正则表达式匹配则会报错
示例:
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^fun$',views.fun),
url(r'^fun2/([0-9]{4})/$',views.fun2),
url(r'^fun3/([0-9]{4})/([0-9]{2})/$',views.fun3),
url(r'fun4/([0-9]{4})/([0-9]{2}/(0-9)+)/$',views.fun4),
]
通过浏览器访问服务
注:url路由由上而下进行匹配,如果在上面就匹配成功,则不会向下匹配
通过浏览器访问服务
127.0.0.1:8000/abc ==>根路由 ==>加载子路由(myweb/urls.py)
> 正则匹配访问的路径(path)>视图函数(views.index)
==> views.py index() 响应内容
命名组
上面为简单实例,属于正则表达式非命名组(通过括号)捕获URL定位,并将他们作为位置参数传递给视图。
在更高级的使用中,我们可以使用正则表达式命名组来捕获URL定位,并将它们作为关键字参数传递给视图
在Python正则表达式中,正则表达式命名组的语法是(?Ppattern),其中命名组中的命名就是name,并且pattern是某些匹配的模式
实例:
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^fun/2018/$',views.fun),
url(r'^fun2/(?P[0-9]{4}/)$',views.fun2),
url(r'^fun3/?P[0-9]{4}/(?P[0-9{2}])/$',views.fun3),
url(r'^fun4/?P[0-9]{4}/(?P[0-9]{2})/(?P[0-9]{2})/$',views.fun4)
]
模型与数据库的关系
模型(Model)负责业务对象和数据库的关系映射(ORM)
ORM是“对象-关系-映射”的简称,主要任务是:
为什么要使用模型
Model是MVC框架中重要的一部分,主要负责程序中用于处理数据逻辑的部分。通常模型对象负责在数据库存储数据。
它实现了数据模型与数据的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库
windows环境安装mysql
cmd命令安装 pip install pymysql
Django项目中配置数据库
修改settings.py文件中的DATABASE配置项
DATABASES = {
‘default’:{
'ENGINE':'django.db.backends.mysql',
'NAME':'**',
'USER':'root',
'PASSWORD':'',
'HOST':'localhost',
'PORT':'3306',
}
}
告诉Django在接下来的mysql操作中使用pymysql
在myweb/init.py,写入导入pymysql代码:
import pymysql
pymysql.install_as_MySQLdb()
开发流程
python manage.py makemigrations
python manage.py migrate