MCV思想:
M是指数据模型,V是指用户界面,C则是控制器。使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。比如一批统计数据你可以分别用柱状图、饼图来表示。C存在的目的则是确保M和V的同步,一旦M改变,V应该同步更新。
优点:
1. 低耦合性
视图层和业务层分离,这样就允许更改视图层代码而不用重新编译模型和控制器代码。
2. 高重用性&可适用性
MVC允许你使用不同样式的视图来访问同一服务器端代码,例如适用手机或者PC端购物,虽然购物方式不通,但是处理订购产品的方式是一样的。因为从模型返回的数据没有进行格式化,所以可以被不同的界面使用:html/wap
MVT:
1. 浏览器发送请求到web服务器
2. Web服务器把这个请求转交到一个WSGI
名词解释:WSGI
Python web开发中,服务端程序可分为2个部分:
服务器程序(用来接收、整理客户端发送的请求)
应用程序(处理服务器程序传递过来的请求)
在开发应用程序的时候,我们会把常用的功能封装起来,成为各种框架,比如Flask,Django,Tornado(使用某框架进行web开发,相当于开发服务端的应用程序,处理后台逻辑)
但是,服务器程序和应用程序互相配合才能给用户提供服务,而不同应用程序(不同框架)会有不同的函数、功能。 此时,我们就需要一个标准,让服务器程序和应用程序都支持这个标准,那么,二者就能很好的配合了
WSGI:wsgi是python web开发的标准,类似于协议。它是服务器程序和应用程序的一个约定,规定了各自使用的接口和功能,以便二和互相配合。
3. 请求生成一个被称为environ的python字典,传递过去几个中间件层,最终到达django应用
4. Urlconf包含在urls.py中,django找到对应url的视图(View)看来处理http请求。(请求是httprequest,一个python字典对象)
5. 被选中的视图要完成:
1) 通过模型与数据库对话
2) 使用模板渲染html
3) 返回一个纯文本响应
4) 抛出一个异常
6. Httpresponse对象离开django后被渲染成一个字符串
7. 在浏览器看到一个梅花的渲染后的web界面
编写路由:
1. 需要先导入对应app的views文件
2. 对函数url()调用:接受三个实参:
1)第一个是一个正则表达式,r让python将接下来的字符串视为原始字符串;引号告诉python正则表达式始于何处终于何处,脱字符^让python查看字符串的开头,美元符号$让python查看字符串的末尾。 Python忽略项目的基础url,如果不匹配返回错误界面。
2)第二个参数指定了要调用的视图函数,匹配时将调用views.index
3)第三个将将这个url模式的名称指定为index,当需要提供这个主页的链接时可以使用这个名称,而不编写url。
编写视图:
导入HttpResponse模块
Request参数必须有,封装了用户请求的所有内容
不可以直接return “hello world”,不能直接返回字符串,需要用这个类封起来,这是django的规则,不是python的。
通过上面两个步骤,我们将index这个url指向了views里的index()函数,它接收用户请求,并返回一个“hello world”字符串。
Render()根据视图提供的数据渲染响应
定义模型:
所谓ORM:对象关系映射,主要实现模型对象到关系数据库数据的映射
class Person(models.Model):
name = models.CharField(max_length=30)
age = models.IntegerField()
def __unicode__(self):
return self.name
Model是django中一个定义了模型基本功能的类,Person类含有两个属性:name和age。
属性name是一个charfield,由字符或文本组成的数据。
Unicode方法是为了告诉django默认使用那个属性来展示有关主题的信息。
建库
python manage.py makemigrations
命令makemigrations让django确定如何让修改数据库,
输出表明django创建了一个0001.py的迁移文件,这个文件将在数据库中为模型Person创建表。
Python manage.py migrate
应用了这种迁移,让django替我们修改数据库
管理网站:
Django提供的管理网站(admin site)让我们可以轻松地处理模型,所以建立管理网站,添加person。
1. 创建超级用户
python manage.py createsuperuser
2. 向管理网站注册模型
from myapp.models import Person
# Register your models here.
admin.site.register(Person)
导入我们要注册的模型Person
再使用admin.site.register()让django通过管理网站管理我们的模型
from models import Person
# Create your views here.
def index(request):
#return HttpResponse("Hello World!")
return render(request,"index.html")
def person(request):
names = Person.objects.order_by(id)
context = {'names':names}
return render(request,'person.html',context)
<ul>
{% for name in names %}
<li>{{ name }}</li>
{% endfor %}
</ul>
<a href="{% url 'index' %}">index地址</a>