Django Web框架的使用
1.前言
Django是基于Python的重量级开源Web框架。Django拥有高度定制的ORM和大量的API,简单灵活的视图编写、优雅的url、适用于快速开发的模板以及强大的管理后台。
Django简介可以查看菜鸟教程
Django 简介 | 菜鸟教程
2.使用pip安装Django
当我们更换镜像源进行pip 安装时,可能会出现报错:ERROR: Cannot determine archive format of :XXXXXXXXXX需要 通过设置 --trusted-host pypi.douban.com 信任该镜像源。
C:\Users\zhangyy>
C:\Users\zhangyy>pip install django==3.2.13 https://mirrors.aliyun.com/pypi/simple/
Collecting https://mirrors.aliyun.com/pypi/simple/Downloading https://mirrors.aliyun.com/pypi/simple/ (21.0 MB)---------------------------------------- 21.0/21.0 MB 8.1 MB/s eta 0:00:00ERROR: Cannot unpack file C:\Users\zhangyy\AppData\Local\Temp\pip-unpack-ypvyb0uw\simple (downloaded from C:\Users\zhangyy\AppData\Local\Temp\pip-req-build-0wx0y5_x, content-type: text/html; charset=utf-8); cannot detect archive format
ERROR: Cannot determine archive format of C:\Users\zhangyy\AppData\Local\Temp\pip-req-build-0wx0y5_xC:\Users\zhangyy>pip install -i https://pypi.douban.com/simple --trusted-host pypi.douban.com Django==4.1.3
Looking in indexes: https://pypi.douban.com/simple
Collecting Django==4.1.3Downloading https://pypi.doubanio.com/packages/4f/be/cd28514516e66c40b87e487be68cf61a1637bd3ec60a2db90bb5075a2df5/Django-4.1.3-py3-none-any.whl (8.1 MB)---------------------------------------- 8.1/8.1 MB 2.5 MB/s eta 0:00:00
Collecting asgiref<4,>=3.5.2Downloading https://pypi.doubanio.com/packages/af/6d/ea3a5c3027c3f14b0321cd4f7e594c776ebe64e4b927432ca6917512a4f7/asgiref-3.5.2-py3-none-any.whl (22 kB)
Collecting sqlparse>=0.2.2Downloading https://pypi.doubanio.com/packages/97/d3/31dd2c3e48fc2060819f4acb0686248250a0f2326356306b38a42e059144/sqlparse-0.4.3-py3-none-any.whl (42 kB)---------------------------------------- 42.8/42.8 kB 2.0 MB/s eta 0:00:00
Collecting tzdataDownloading https://pypi.doubanio.com/packages/61/1e/3c4bf37f8d6ceba07ae357e70eedd21bd15a032b460bab6b12a58c0fce9d/tzdata-2022.6-py2.py3-none-any.whl (338 kB)---------------------------------------- 338.8/338.8 kB 7.1 MB/s eta 0:00:00
Installing collected packages: tzdata, sqlparse, asgiref, Django
Successfully installed Django-4.1.3 asgiref-3.5.2 sqlparse-0.4.3 tzdata-2022.6
现在安装成功了。
3.创建一个Django项目
用pycharm创建一个Django项目
自动创建的项目中的文件有以下这些:
manage.py:Django程序执行的入口
db.sqlite3:SQLite的数据库文件,Django默认使用这种小型数据库存取数据,非必须
templates:Django生成的HTML模板文件夹,也可以在每个App中使用模板文件夹
djangoProject:Django生成的和项目同名的配置文件夹
settings.py:Django总的配置文件,可以配置App、数据库、中间件、模板等诸多选项
urls.py:Django默认的路由配置文件
wsgi.py:Django实现的WSGI接口的文件,用来处理Web请求
运行该项目
进入pycharm命令行,发现有个报错:
无法加载文件\venv\Scripts\activate.ps1,因为在此系统上禁止运行脚本。
无法加载文件 C:\Users\zhangyy\PycharmProjects\djangoProject\venv\Scripts\activate.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?Lin
kID=135170 中的 about_Execution_Policies。+ CategoryInfo : SecurityError: (:) [],ParentContainsErrorRecordException+ FullyQualifiedErrorId : UnauthorizedAccess
PS C:\Users\zhangyy\PycharmProjects\djangoProject> get-executionpolicy
Restricted
打开Windows Powershall在windows以管理员的身份运行,命令窗口输入set-executionpolicy remotesigned,回车,输入Y。
Windows PowerShell
版权所有(C) Microsoft Corporation。保留所有权利。安装最新的 PowerShell,了解新功能和改进!https://aka.ms/PSWindowsPS C:\WINDOWS\system32> set-executionpolicy remotesigned执行策略更改
执行策略可帮助你防止执行不信任的脚本。更改执行策略可能会产生安全风险,如 https:/go.microsoft.com/fwlink/?LinkID=135170
中的 about_Execution_Policies 帮助主题所述。是否要更改执行策略?
[Y] 是(Y) [A] 全是(A) [N] 否(N) [L] 全否(L) [S] 暂停(S) [?] 帮助 (默认值为“N”): Y
PS C:\WINDOWS\system32>
检查发现问题解决
PS C:\Users\zhangyy\PycharmProjects\djangoProject> get-executionpolicy
RemoteSigned
创建完Django项目后,在pycharm的命令行执行一下命令,可以为Django项目生成数据表,并创建一个账户和密码。密码有强密码要求,但是也可以强行不理会。
PS C:\Users\zhangyy\PycharmProjects\djangoProject> python manage.py migrate
Operations to perform:Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:Applying contenttypes.0001_initial... OKApplying auth.0001_initial... OKApplying admin.0001_initial... OKApplying admin.0002_logentry_remove_auto_add... OKApplying admin.0003_logentry_add_action_flag_choices... OKApplying contenttypes.0002_remove_content_type_name... OKApplying auth.0002_alter_permission_name_max_length... OKApplying auth.0003_alter_user_email_max_length... OKApplying auth.0004_alter_user_username_opts... OKApplying auth.0005_alter_user_last_login_null... OKApplying auth.0006_require_contenttypes_0002... OKApplying auth.0007_alter_validators_add_error_messages... OKApplying auth.0008_alter_user_username_max_length... OKApplying auth.0009_alter_user_last_name_max_length... OKApplying auth.0010_alter_group_name_max_length... OKApplying auth.0011_update_proxy_permissions... OKApplying auth.0012_alter_user_first_name_max_length... OKApplying sessions.0001_initial... OK
PS C:\Users\zhangyy\PycharmProjects\djangoProject> python manage.py createsuperuser
Username (leave blank to use 'zhangyy'): zhangyy
Email address:
Password:
Password (again):
The password is too similar to the username.
This password is too short. It must contain at least 8 characters.
Bypass password validation and create user anyway? [y/N]: y
Superuser created successfully.
重新启动服务器
C:\Users\zhangyy\PycharmProjects\djangoProject\venv\Scripts\python.exe C:\Users\zhangyy\PycharmProjects\djangoProject\manage.py runserver 8000
Watching for file changes with StatReloader
Performing system checks...System check identified no issues (0 silenced).
November 06, 2022 - 20:18:36
Django version 4.1.3, using settings 'djangoProject.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
在浏览器中访问“http://127.0.0.1:8000/admin/”,出现一个后台登录界面的入口。
使用刚刚创建的账户登录,可以成功登录后台管理界面,如下:
4.创建APP
在Django项目中,推荐使用App来完成不同模块的任务,通过在“terminal”执行以下命令来启用一个应用程序
(venv) PS C:\Users\zhangyy\PycharmProjects\djangoProject> python manage.py startapp app1
可以看到App1的目录结构如下
文件目录说明:
migrations:执行数据库迁移生成的脚本
admin.py:配置Django管理后台的文件
apps.py:单独配置添加的每个App的文件
models.py:创建数据库数据模型对象的文件
tests.py:用来编写测试脚本的文件
views.py:用来编写视图控制器的文件
最后,将已经创建的App的名字添加到settings.py配置文件中,然后将其激活。
# Application definitionINSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','app1',
]
5.数据模型
5.1 在App中添加数据模型
在app1的models.py中添加如下代码
from django.db import models # 引入django.db.models模块class CreateUpdate(models.Model): # 创建抽象数据模型,同样要继承于models.Model# 创建时间,使用models.DateTimeFieldcreated_at = models.DateTimeField(auto_now_add=True)# 修改时间,使用models.DateTimeFieldupdated_at = models.DateTimeField(auto_now=True)class Meta: # 元数据,除了字段以外的所有属性# 设置model为抽象类。指定该表不应该在数据库中创建abstract = Trueclass Person(CreateUpdate): # 继承CreateUpdate基类first_name = models.CharField(max_length=30)last_name = models.CharField(max_length=30)class Order(CreateUpdate): # 继承CreateUpdate基类order_id = models.CharField(max_length=30, db_index=True)order_desc = models.CharField(max_length=120)
这样,我们用于创建日期和修改日期的数据模型继承于CreateUpdate类。
C:\Users\zhangyy\PycharmProjects\djangoProject\venv\Scripts\python.exe C:\Users\zhangyy\PycharmProjects\djangoProject\manage.py runserver 8000
Performing system checks...Watching for file changes with StatReloader
System check identified no issues (0 silenced).
November 20, 2022 - 19:58:03
Django version 4.1.3, using settings 'djangoProject.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
可以总结下Django数据模型中常见的字段类型和说明
5.2 执行数据库迁移
创建完数据模型后,开始做数据库迁移,首先我们不希望用Django默认的自带的SQLite数据库,我们想用MySQL数据库,在项目的settings.py配置文件中找到如下配置:
DATABASES = {'default': {'ENGINE': 'django.db.backends.sqlite3','NAME': BASE_DIR / 'db.sqlite3',}
}
替换为
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'demo','USER': 'root','PASSWORD': 'root'}
}
创建数据库,在终端连接数据库,执行数据库登录命令并按照提示输入您的数据库密码,连接成功后执行如下语句创建数据库:
(venv) PS C:\Users\zhangyy\PycharmProjects\djangoProject> mysql -u root -p
Enter password: ****
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 8.0.31 MySQL Community Server - GPLCopyright (c) 2000, 2022, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> create database demo default character set utf8;
Query OK, 1 row affected, 1 warning (0.01 sec)mysql>
安装数据库的驱动:
(venv) PS C:\Users\zhangyy\PycharmProjects\djangoProject> pip install pymysql
Collecting pymysqlUsing cached PyMySQL-1.0.2-py3-none-any.whl (43 kB)
Installing collected packages: pymysql
Successfully installed pymysql-1.0.2
找到C:\Users\zhangyy\PycharmProjects\djangoProject\djangoProject文件,在行首添加如下代码,据说可以将pymysql发挥最大的数据库操作性能。
import pymysql
pymysql.install_as_MySQLdb()
执行以下命令,创建数据表:
(venv) PS C:\Users\zhangyy\PycharmProjects\djangoProject> python manage.py makemigrations
Migrations for 'app1':app1\migrations\0001_initial.py- Create model Order- Create model Person
(venv) PS C:\Users\zhangyy\PycharmProjects\djangoProject> python manage.py migrate
Operations to perform:Apply all migrations: admin, app1, auth, contenttypes, sessions
Running migrations:Applying contenttypes.0001_initial... OKApplying auth.0001_initial... OKApplying admin.0001_initial... OKApplying admin.0002_logentry_remove_auto_add... OKApplying admin.0003_logentry_add_action_flag_choices... OKApplying app1.0001_initial... OKApplying contenttypes.0002_remove_content_type_name... OKApplying auth.0002_alter_permission_name_max_length... OKApplying auth.0003_alter_user_email_max_length... OKApplying auth.0004_alter_user_username_opts... OKApplying auth.0005_alter_user_last_login_null... OKApplying auth.0006_require_contenttypes_0002... OKApplying auth.0007_alter_validators_add_error_messages... OKApplying auth.0008_alter_user_username_max_length... OKApplying auth.0009_alter_user_last_name_max_length... OKApplying auth.0010_alter_group_name_max_length... OKApplying auth.0011_update_proxy_permissions... OKApplying auth.0012_alter_user_first_name_max_length... OKApplying sessions.0001_initial... OK
(venv) PS C:\Users\zhangyy\PycharmProjects\djangoProject>
用navicat连接到数据库,连接参数安装settings.py配置文件填写,可以从数据库查看到创建的这两张表
其中
Person类对应app1_person表
Order类对应app1_order表
而CreateUpdate是个抽象类,不会创建表结构。
5.3 了解Django数据API
可以在Django的交互命令行中执行命令
导入数据模型并用两种方式创建数据:
(venv) PS C:\Users\zhangyy\PycharmProjects\djangoProject> python manage.py shell
Python 3.9.6 (tags/v3.9.6:db3ff76, Jun 28 2021, 15:26:21) [MSC v.1929 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from app1.models import Person, Order
>>> p = Person.objects.create(first_name="hong", last_name="zhang")
>>> p = Person(first_name="yy",last_name="zhang")
>>> p.save()
>>>
检查数据库,数据创建成功:
查询数据和修改数据:
>>> Person.objects.get(last_name="zhang")
Traceback (most recent call last):File "<console>", line 1, in <module>File "D:\Users\zhangyy\AppData\Local\Programs\Python\Python39\lib\site-packages\django\db\models\manager.py", line 85, in manager_methodreturn getattr(self.get_queryset(), name)(*args, **kwargs)File "D:\Users\zhangyy\AppData\Local\Programs\Python\Python39\lib\site-packages\django\db\models\query.py", line 653, in getraise self.model.MultipleObjectsReturned(
app1.models.Person.MultipleObjectsReturned: get() returned more than one Person -- it returned 2!
>>> Person.objects.get(first_name="yy")
<Person: Person object (2)>
>>> Person.objects.get(first_name="hong")
<Person: Person object (1)>
>>> p = Person.objects.get(first_name="yy")
>>> p.first_name = "yyy"
>>> p.save()
也可以使用get_or_create,如果数据存在就修改,不存在就创建:
>>> p, is_created = Person.objects.get_or_create(
... first_name="yyyy",
... defaults={"last_name":"zhang"}
... )
>>>
数据库连接如下
6.管理后台
定义好数据模型后,就可以配置管理后台了,按照如下代码编辑app1下面的admin.py文件:
from django.contrib import admin # 引入admin模块
from app1.models import Person, Order # 引入数据模型类class PersonAdmin(admin.ModelAdmin):"""创建PersonAdmin类,继承于admin.ModelAdmin"""# 配置展示列表,在Person板块下的列表展示list_display = ('first_name', 'last_name')# 配置过滤查询字段,在Person板块下右侧过滤框list_filter = ('first_name', 'last_name')# 配置可以搜索的字段,在Person板块下右侧搜索框search_fields = ('first_name',)# 配置只读字段展示,设置后该字段不可编辑readonly_fields = ('created_at', 'updated_at')# 绑定Person模型到PersonAdmin管理后台
admin.site.register(Person, PersonAdmin)
点击“run”,在浏览器中访问“http://127.0.0.1:8000/admin/”,效果如图:
7.路由
Django 的URL路由流程:
(1) Django查找全局urlpatterns变量(urls.py)
(2) 按照先后顺序,对URL逐一匹配urlpatterns每个元素。
(3) 找到第一个匹配时停止查找,根据匹配结果执行对应的处理函数。
(4) 如果没有找到匹配或者出现异常,Django进行错误处理。
Django 支持三种表达形式,分别是:
(1)精确地字符串格式:articles/2022/。
(2)Django 的转换格式: <类型:变量名>,articles/<int:year>/。
(3)正则表达式格式,如“articles/(?p<year>[0-9]{4)/”。
编写URL的三种情况:
1.普通URL
2.顺序传参
3.关键字传参。
推荐使用关键字传参。打开项目根目录的配置文件夹下面的urls.py文件,打开文件,添加一行代码如下:
"""djangoProject URL ConfigurationThe `urlpatterns` list routes URLs to views. For more information please see:https://docs.djangoproject.com/en/4.1/topics/http/urls/
Examples:
Function views1. Add an import: from my_app import views2. Add a URL to urlpatterns: path('', views.home, name='home')
Class-based views1. Add an import: from other_app.views import Home2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
Including another URLconf1. Import the include() function: from django.urls import include, path2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path, includeurlpatterns = [path('admin/', admin.site.urls),path('app1/', include('app1.urls')) #添加
]
然后在app1下面创建一个urls.py文件,并在其中编写属于这个模块的url规则:
下面用三种方式创建路由。
1.精确匹配
app1的urls.py文件:
from app1 import views as app1_views
from django.urls import path
urlpatterns = [# 精确匹配视图path('articles/2022/', app1_views.articles),
]
其中app1_views是views的别名。
在app1的views.py添加代码:
from django.shortcuts import render
from django.http import HttpResponse, HttpResponseRedirectdef articles(request):return HttpResponse("hello world")
测试
2. 传入参数
app1的urls.py文件:
from app1 import views as app1_views
from django.urls import path
urlpatterns = [# 匹配一个整数path('article/<int:year>', app1_views.articles),
]
在app1的views.py修改代码:
from django.shortcuts import render
from django.http import HttpResponse, HttpResponseRedirectdef articles(request, year):content = 'the year is %s' % yearreturn HttpResponse(content)
测试
3. 正则匹配
app1的urls.py文件:
from django.urls import re_path
from app1 import views as views
from django.urls import path
urlpatterns = [# 按照正则表达式匹配4位数字年份re_path(r'^article/(?P<year>[0-9]{4})/$', views.article),
]
在app1的views.py代码保持不变
测试
若修改app1的urls.py文件为:
from django.urls import re_path
from app1 import views as views
from django.urls import path
urlpatterns = [# 按照正则表达式匹配4位数字年份和2位数字月份re_path(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.month_articles),
views.article_detail),
]
在app1的views.py修改代码:
from django.shortcuts import render
from django.http import HttpResponse, HttpResponseRedirectdef month_articles(request, year, month):content = 'the year is %s , the month is %s' % (year, month)return HttpResponse(content)
测试
8.表单
在app1文件夹下创建一个forms.py文件,添加如下类代码:
from django import forms
class PersonForm(forms.Form):first_name = forms.CharField(label='你的名字', max_length=20)last_name = forms.CharField(label='你的姓氏', max_length=20)
上面定义了一个PersonForm表单类,两个字段类型为forms.CharField,first_name指字段的label为你的名字,并且指定该字段的最大长度为20字符。max_length可以指定forms.CharField的验证长度。
表单类forms.Form有一个is_valid()方法,可以在views.py中验证提交的表单是否符合规则。对于提交的内容,在views.py下编写 如下代码:
from django.shortcuts import render
from django.http import HttpResponse, HttpResponseRedirect
from app1.forms import PersonFormdef get_name(request):# 判断请求方法是否为POSTif request.method == 'POST':# 将请求数据填充到PersonForm实例中form = PersonForm(request.POST)# 判断form是否为有效表单if form.is_valid():# 使用form.cleaned_data获取请求的数据first_name = form.cleaned_data['first_name']last_name = form.cleaned_data['last_name']# 响应拼接后的字符串return HttpResponse(first_name + '' + last_name)else:return HttpResponseRedirect('/error/')# 请求为GET方法else:return render(request, 'name.html', {'form': PersonForm()})
这里有一个html文件的名字。我们要创建这个html文件。
在app1的同级目录下有个templates目录,在这个目录里新建name.html文件。
编写name.html文件
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<form action="/app1/get_name" method="post">{% csrf_token %}{{form}}<button type="submit">提交</button>
</form>
</body>
</html>
还需要到app1目录下的urls.py的
urlpatterns = []里面
添加一行
path('get_name', views.get_name),
OK, 接下来测试。
打开
http://127.0.0.1:8000/app1/get_name
可以看到
填写名字,点击提交,效果如图
这里显示“yyzhang”就是执行了views.py里的这行代码
return HttpResponse(first_name + '' + last_name)
9.视图
9.1基于函数的视图
django.http模块下有诸多继承于HttpResponse的对象,其中大部分在开发中都可以利用到。例如我们想在查询不到数据时,给客户端返回一个Http 404 的错误页面。可以利用django.http下面的Http404对象,在views.py里编写代码如下:
from django.shortcuts import render
from django.http import HttpResponse, HttpResponseRedirect, Http404
from app1.forms import PersonForm
from app1.models import Persondef person_detail(request, pk): # url参数pktry:p = Person.objects.get(pk=pk) # 获取Person数据except Person.DoesNotExist:raise Http404('Person Does Not Exist') # 获取不到抛出Http404错误页面return render(request, 'person_detail.html', {'person': p}) # 返回详细信息视图
新建一个与name.html文件同级的person_detail.html文件
编写如下html代码
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>{{ person.first_name }}
</body>
</html>
不要忘了到app1目录下的urls.py的urlpatterns = []里面 添加一行path:
path('person_detail/<int:pk>', views.person_detail)
测试结果1:
测试结果2
测试结果3:
对照5.3章节的数据库表截图,可知,测试正确
9.2基于类的视图
基于类的视图和基于函数的视图大同小异。首先定义一个类视图,这个类视图需要继承一个基础的类视图,所有的类视图都继承自views.View。类视图的初始化参数需要给出。将上一章节定义的get_name()方法改成基于类的视图,修改views.py代码如下:
from django.shortcuts import render
from django.http import HttpResponse, HttpResponseRedirect, Http404
from django.views import View
from app1.forms import PersonForm
from app1.models import Personclass PersonFormView(View):form_class = PersonForm # 定义表单类initial = {'key': 'value'} # 定义表单初始化展示参数template_name = 'name.html' # 定义渲染的模板def get(self, request, *args, **kwargs): # 定义GET请求的方法# 渲染表单return render(request, self.template_name,{'form': self.form_class(initial=self.initial)})def post(self, request, *args, **kwargs): # 定义POST请求的方法form = self.form_class(request.POST) # 填充表单实例if form.is_valid(): # 判断请求是否有效# 使用form.cleaned_data获取请求的数据first_name = form.cleaned_data['first_name']last_name = form.cleaned_data['last_name']# 响应拼接后的字符串return HttpResponse(first_name + '' + last_name) # 返回拼接的字符串return render(request, self.template_name, {'form': form}) # 如果表单无效,返回表单
到app1目录下的urls.py的urlpatterns = []里面 添加一行path:
path('get_name1', views.PersonFormView.as_view()),
测试
填写名字,点击提交,效果如图
OK, 基于类的视图也测试成功!
10.Django模板
模板语言包括四个内容
下面都是从views.py中修改演示模板
变量 在之间的例子里已经用过了。
标签 的使用
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>{{ person.first_name }}{% if person.first_name == 'hong'%}hi, hong{% else %}hi, 陌生人{% endif %}
</body>
</html>
测试
过滤器的使用
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>{{ person.first_name }}{{ person.first_name|upper }}{% if person.first_name == 'hong'%}hi, hong{% else %}hi, 陌生人{% endif %}
</body>
</html>
测试
注释的使用
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>{{ person.first_name }}<!--我是注释-->{{ person.first_name|upper }}{% if person.first_name == 'hong'%}hi, hong{% else %}hi, 陌生人{% endif %}
</body>
</html>
测试结果
如果你只是想 将上面HTML里的“陌生人”注释掉,可以将“陌生人”修改为 “{# 陌生人#}”。
11.最后
通过这篇博客的学习,不难发现,Django视图编写灵活、URL优雅,有适用于快速开发的模板以及强大的管理后台,这些使得它在python web开发领域占据了不可动摇的地位。
Django Web框架的使用相关推荐
- Django Web框架教学笔记-1
<Django Web框架教学笔记> 目录 文章目录 <Django Web框架教学笔记> 目录 Django框架的介绍 Django的安装 Django框架开发 创建项目的指 ...
- Django web 框架学习之旅(3)
<Django Web 框架> 目录 静态文件 Django中的应用 - app 什么是应用(app) 创建应用app Django应用的结构组成 数据库 和 模型 Django下使用my ...
- Django web框架学习之旅(4)
<Django Web 框架> 目录 Django shell的使用 admin 后台数据库管理 自定义后台管理数据表 修改后台Models的展现形式 模型管理器类 数据库表管理 数据表关 ...
- Django web框架
Web框架 web 框架本质 - Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端. HTTP协议 HTTP协议介绍HTTP协议对收发消息的格式要求每个HTTP ...
- 在IIS上部署基于django WEB框架的python网站应用
django是一款基于python语言的WEB开源框架,本文给出了如何将基于django写的python网站部署到window的IIS上. 笔者的运行环境: Window xp sp3 IIS 5.1 ...
- python Django web 框架 (二十)之ORM
Django之模型层第一篇:单表操作 一 ORM简介 我们在使用Django框架开发web应用的过程中,不可避免地会涉及到数据的管理操作(如增.删.改.查),而一旦谈到数据的管理操作,就需要用到数据库 ...
- Django web框架学习笔记
Django1.11.4 版本支持Python3.5 3.6 1.Django安装 pip install django==1.11.4 2.验证是否安装成本 python import django ...
- Django web框架-----Django连接现有mysql数据库
第一步:win10下载mysql5.7压缩包配置安装mysql,创建数据库或导入数据库 第二步:win10搭建django2.1.7开发环境,创建项目为mytestsite,创建应用app为quick ...
- Django web框架-----Django连接本地现有mysql数据库
第一步:win10下载mysql5.7压缩包配置安装mysql,创建数据库或导入数据库 第二步:win10搭建django2.1.7开发环境,创建项目为mytestsite,创建应用app为quick ...
最新文章
- 华为汪涛:无线网络未来十年十大趋势
- 数据库系统概念总结:第八章 关系数据库设计
- JS判断客户端是手机还是PC的2个代码
- bucket sort sample sort 并行_Java 中 Arrays.sort 和 Arrays.parallelSort 哪个更快?
- 苹果6软件服务器验证失败是怎么回事,iPhone6手机出现验证错误怎么办?
- ActiveMQ消息队列用法
- Robust line matching through line–point invariants
- 2021年中国仪表阀市场趋势报告、技术动态创新及2027年市场预测
- mac和jar的关系
- mysql sqlserver 拷贝_SQLyog工具进行SQLSERVER表结构或数据拷贝到MySQL数据库
- 学习Java,真的可以月薪过万嘛?真实个人经历告诉你,记录了平时学习的内容以及学习过程中最真实的感受(二)
- win10系统与时间服务器同步超时,Win10时间同步出错怎么办 Win10时间同步出错解决方法...
- Ubuntu下可以使用的微信
- PanDownload 3.5.1 卢本伟修改版
- 【实用工具】UML图六种箭头的含义
- SGU 507 Treediff (dsu on tree)
- 把手账打印成书 把回忆装订成册
- Inno Setup打包实现安装自启和开机自启
- 使用c语言测试大端和小端,C语言*符号使用及大端法小端法测试
- transition过渡