照常的周五TestOps测试运维课程总结时间~
在上周六的全天课程以及这周三晚上的复习答疑课程,我们一起对Python web 开发框架——Django进行了进步的学习。
今天这篇文章芒果帮大家一起回顾一下课程内容。
Django小介绍
Django是一个高级Python Web框架, 鼓励快速,简洁, 以程序设计的思想进行开发。通过使用这个框架, 可以减少很多开发麻烦, 使你更专注于编写自己的app, 而不需要重复造轮子。
Django特点:
用户在浏览器中输入URL后的回车, 浏览器会对URL进行检查, 首先判断协议,如果是http就按照 Web 来处理, 然互调用DNS查询, 将域名转换为IP地址, 然后经过网络传输到达对应Web服务器。
服务器对url进行解析后, 调用View中的逻辑(MTV中的V), 其中又涉及到Model(MTV中的M), 与数据库的进行交互, 将数据发到Template(MTV中的T)进行渲染。
接着发送到浏览器中,最后浏览器以合适的方式呈现给用户。
Django安装
先安装好Python环境;
开始安装Django:
方法一:
cmd命令:
pip3 install django
方法二:
官网下载Django-2.1.3.tar.gz
下载地址:
https://www.djangoproject.com/download/
解压Django-2.1.3.tar.gz
cmd命令:
cd Django-2.1.3
python setup.py install
检查是否安装成功:
import django
django.VERSION
构建Django项目虚拟环境:
cdm命令:
python -m venv django_env (django_env为虚拟环境名称)
激活虚拟环境:
cmd命令:
django_env\Scripts\activate (windows)
source django_env/bin/activate (linux)
创建Django项目和app:
cmd命令:
django-admin startproject mywebproject
创建Django app:
cmd命令:
python manage.py startapp myblog
在setting.py文件中添加app信息:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'myblog',
]
启动服务器:
cmd命令:
python mange.py runserver (8001)
也可使用Pycharm启动——Edit Configurations配host\port
规划URL
简洁优雅的 URL 规划对于一个高质量 Web 应用来说至关重要。Django 推崇优美的 URL 设计,所以不要把诸如 .php 和 .asp 之类的冗余的后缀放到 URL 里。
为了设计你自己的 URL,你需要创建一个叫做 URLconf 的 Python 模块。一张包含 URL 匹配模式和 Python 回调函数之间的映射表。URLconf 也有利于将 Python 代码与 URL 解耦合(译注:使各个模块分离,独立)。
示例:
from django.contrib import admin
from django.urls import path,re_path
from myblog import views
urlpatterns = [
path('admin/', admin.site.urls),
path('main/', views.main),
path('login/', views.login),
path('login_action/', views.login_action),
path('logout/',views.logout),
path('accounts/login/',views.login),
path('authors/',views.authors),
re_path('^myblog/authors/(?P<author_id>[0-9]+)/$',views.author_info),
re_path('^myblog/authors/(?P<author_id>[0-9]+)/(?P<log_id>[0-9]+)/$',views.log_info),
path('new_author/',views.new_author),
]
上面的代码将 URL 的正则表达式映射到 views 里的回调函数。正则表达式通过括号来提取 URL 中的参数值。当一个用户请求页面时,Django 会顺序遍历这些匹配模式,直至模式和请求的 URL 成功匹配。(如果全部模式都无法匹配,Django 会返回一个404视图。)这个过程会在瞬间完成,因为这些正则表达式在启动时就被编译了。
一旦其中一个正则表达式匹配成功,Django 就会导入并调用指定的视图——那是一个简单的 Python 函数。视图会被传进一个请求(requeset)对象——其中包含了请求元数据——和正则表达式匹配到的那些参数值。
比如:
如果用户请求了“/myblog/5/3/”这样的 URL,
Django 就会这样调用函数:
mylog.views.log_info(request,5,3)。
编写视图
视图函数的执行结果只可能有两种:返回一个包含请求页面内容的 HttpResponse 对象;或者是抛出 Http404 这类异常。至于视图接下来还要做什么则由你决定。
通常来说,一个视图的工作就是:从参数获取数据,加载模板,然后模板进行带数据的渲染。
示例:
from django.shortcuts import render
from myblog.models import Author
def authors(request):
authors = Author.objects.all()
return render(request,"authors.html",{"authors":authors})
设计模板
Django 允许设置搜索模板路径,这样可以最小化模板之间的冗余。
在Django设置中,你可以通过 DIRS 参数指定目录列表来检索模板。如果模板不在第一个目录中,就继续检查第二个,以此类推。
上面示例中加载了“authors.html”这个模板,它的实现可以是:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>作者列表</title>
</head>
<body>
{% if authors %}
<ul>
{% for author in authors %}
<li><a href="/myblog/authors/{{ author.id }}/">{{ author.name }}</a> <li>
{% endfor %}
</ul>
{% else %}
<p>当前没有作者注册</p>
{% endif %}
</body>
</html>
变量都被双花括号括起来了。
{{ author.name }} 的意思是:“输出 auhtor 的 name 属性值”。
这个“点”不止用于查找属性,还可以查找字典键值、索引和函数调用。
以上只是 Django 的功能性概述。Django 还有更多实用的特性: