一、Django中的app应用
app(application)就是应用的意思,当我们的项目足够大的时候,我们将功能单独分成多个app进行开发。
Django本身是鼓励开发者进行相对独立的项目开发的,因此我们建议以后使用app进行开发。
1. 通过命令行创建app应用
(1)、命令: python manage.py startapp app名称
(2)、在 settings.py 文件 INSTALLD_APPS 列表中注册app
2. 使用pycharm创建App应用
并且会在 settings.py中的INSTALL_APPS中自动添加配置。
二、App内部的独立文件
3. 子路由(独立url)
之前我们将所有的路由都放到了主urls当中,django支持我们在每个app应用中编写自己的子路由(url)
(1)、编写自己的子路由
(2)、主路由包含子路由
(3)、访问路径时,主路径+子路径
4. 独立模板文件
在外层的templates中和app01、app02中分别创建index.html,默认访问外层templates中的index.html文件,如果templates中不存在,则按照settings.py中
App的注册顺序进行加载。
4. 独立模板文件
在外层的templates中和app01、app02中分别创建index.html,默认访问外层templates中的index.html文件,如果templates中不存在,则按照settings.py中
App的注册顺序进行加载。
然后在settings.py中设置:
如果想要访问app01中的lw2.html文件,则需要在app01中的views.py文件设置路径:
此时访问到的就是app01中的templates中的lw2.html文件,否则会直接访问外部的templates中的内容。
5. 独立静态文件
每一个子app下面都建立一个static文件,将需要导入的素材放入一个文件夹中,使用时的路径为‘app01/1.jpg’.
创建一个html文件,为了加载app01中的图片:
在app01中定义视图函数:
再在子路由中导入路径:
urlpatterns=[
path('lw2/',views.lw2)
]
就可以通过浏览器访问到图片。
注意:
在线上和项目当中,django使用不是一套静态文件
Apache和Nginx当中都需要配置独立的静态文件路由
三、登录功能
先设置子路由和一个实现登录功能页面:login.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登录页面</title>
</head>
<body>
<form action="/app01/login/" method="post">
{% csrf_token %}
<p>
用户名:<input type="text" name="username">
</p>
<p>
密码:<input type="password" name="pwd">
</p>
<p>
<input type="submit" value="登录">
</p>
<span style="color: red">{{ error_msg }}</span>
</form>
</body>
</html>
1、查看request.method 参数内容
在app01的views.py中,定义视图函数:
就可以返回login页面表单的提交方式为POST还是GET.
2、获取表单提交过来的内容
通过request.POST.get()方法可以返回用户登录时的信息,根据信息来判断和进行下一事件。
如果登录信息与数据库中信息不相匹配,则重新返回新的登录页面。
3、向页面中返回错误信息
此功能是在上一个的基础上加了一个反向传递参数,若登录失败则向html页面传递一个error_msg参数,用来提醒用户登录问题。
4、重定向到成功界面
先在views.py中导入redirect包,在创建一个登录成功后的页面success.html,利用重定向功能在登录页面成功后可以跳转到此页面。
四、视图系统
一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应。
响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片。
无论视图本身包含什么逻辑,都要返回响应。代码写在哪里也无所谓,只要它在你当前项目目录下面。大家约定成俗将视图放置在项目(project)或应用程序(app)目录中的名为views.py的文件中。
6、视图系统 CBV 和FBV
1.FBV : 基于函数的视图。
2.CBV: 基于类的视图。
(1)创建视图类步骤:
① 创建一个类继承 from django.views import View。
②覆写(重写) get() 、post() 方法。
1)当浏览器是get请求的时候,默认调用get() 方法。
2)当浏览器是post请求的时候、默认调用的是post()方法。
3)注意: get()、post() 方法 必须要声明出形参(request)。
③路由中使用方式: views.类名.as_views()
④注意: CBV 和FBV 同级的,并且根据个人习惯使用不同方式。
五、MTV和MVC
1.MTV :
(1)M : model 数据模型,例如 orm中的模型类。
(2)T: templates 模板: 例如 html页面。
(3)V: view 视图: 使用函数 例如: CBV 、FBV。
2.MVC :
(1)M: model 数据模型,例如 orm中的模型类。
(2)V: view 视图: 对应MTV中的 T
(3)C:controller 控制器:对应 MTV 中的 V。
3.Django中的MTV 是根据MVC模式演变过来的。
4.使用MVC 或MTV 模式的好处,解耦合。