1.配置环境
1.1官网下载安装python以及pip
官网链接:https://www.python.org/
1.2配置python为全局环境变量
打开电脑环境变量,配置python.exe的路径
1.3安装django
pip install django==2.0
2.创建django项目
- 创建项目:django-admin startproject 项目名称。
- 创建app:python manage.py startapp app名称。
- 访问环境建设:python manage.py runserver IP地址:端口号。
3.项目结构介绍
- manage.py:项目交互。
- settings.py:项目配置项。
- urls.py:配置url路由,制定访问参数规则。
- wsgi.py:web服务器入口,部署项目时候需要。
4.网站构建
用浏览器访问网站,系统会根据访问的url地址,获取视图内容。
4.1视图构建
编辑app下的views.py文件,第一个参数为request,其他参数视传参情况而定。
def 视图名称(request,...):
return ......
4.2url构建
编辑urls.py文件,使用path、re-path或者include制定url规则。针对大型项目,都需要借助include函数,在app内部建立自己的url匹配规则。
urlpatterns = [
path('admin/',admin.site.urls),
re_path(r'articles/(?P<year>[0-9]{4})/',views.year_archive),
path('book',include("book.urls")),
]
4.2.1url参数
用尖括号<>定义参数,或者?方式
www.xxx.com/<id>
www.xxx.com?id=
4.2.2 path函数
path用法:
path(route,view,name=None,kwargs=None)
- route:url的匹配规则,可以指定数据类型,比如<int:id>。
- view:视图函数、类视图或者django.urls.include()函数的返回值。
- name:url命名。
4.2.3 re-path函数
re-path函数与path函数参数一样,但是第一个参数route可以是一个正则表达式。
4.2.4 include函数
- app包含urls,可以指定命名空间。
- 包含一个列表或者元组,这个元组又包含path或者re_path函数。
4.2.5url反转
知道视图函数,反转到他的url,使用reverse实现。
reverse("list")
>/book/list/
4.2.6自定义url转换器
- 定义一个类。
- 在类中定义一个属性regex,用来保存url转换器规则的正则表达式。
- 实现to_python(self,value)方法,转换url的值,并将值传递给视图函数。
- 实现to_urls(self,values)方法,做url反转,将传递进来的参数转换后拼接成一个正确的url。
- 将定义好的转换器,注册到django中。
# 1.定义一个类
class FourDiggitYearConverter:
# 2.定义一个正则表达式
regex = '[0-9]{4}'
# 3.定义to_python方法
def to_python(self,value):
return int(value)
# 4.定义to_url方法
def to_url(self,value):
return '%04d' % value
# 5.注册到django中
from django.urls import register_converter
register_converter(converters.FourDiggitYearConverter,'yyyy')
urlpatterns = [
path('articles/2003',views.special_case_2003),
# 使用注册的转换器
path('articles/<yyyy:year>/',view.year_archive),
...
]
5.DTL模板
DTL(Django Template Language),是django内置的模板语言,是一种带有特殊语法的HTML文件,这个HTML文件可以被django编译,可以传递参数进去,实现数据动态化。在编译完成后,生成一个普通的HTML文件,然后发送给客户端。
5.1渲染模板
5.1.1render_to_string渲染方法
找到模板,将模板编译后渲染成python的字符串格式,然后通过HttpResponse类包装成一个HttpResponse对象返回回去。
from django.template.loader import render_to_string
fron django.tttp import HttpResponse
def plane_detail(request,plane_id):
html = render_to_string("detail.html")
return HttpResponse(html)
5.1.2render渲染方法
直接将模板渲染成字符串并包装成HttpResponse对象,一步到位。
from django.shotcuts import render
def plane_detail(request):
return render(request,'detail.html')
5.2模板查找路径配置
模板查找的路径一般是在settings.py中设置,TEMPLATES配置包含了模板引擎配置、模板查找路径配置以及模板上下文配置等。
5.2.1DIRS列表
存放所有的模板路径,在视图中使用render和render_to_string渲染模板时,会在这里查找。
5.2.2APP_DIRS
默认为True,在INSTALLED_APPS下的templates文件夹中查找模板。
5.2.3查找顺序
- 首先在DIRS列表中查找;
- 如果没有,检查是否安装对应app;
- 如果已安装此app,则在此app下templates文件夹中查找;
- 如果未找到,则在其他app中查找;
- 如果还是没有找到,则抛出异常TemplateDoesNotExist。
5.3DTL模板语法
5.3.1变量
变量的命名,只能是阿拉伯数字和英文字符以及下划线的组合,不能出现标点符号等特殊字符。变量需要通过视图函数进行渲染,视图函数在使用render或者render_to_st
eing的时候可以传递一个context的参数,这个参数是一个字典类型,模板中的变量从字典中读取值。
# profile.html模板代码
<p>{{username}}</p>
# views.py代码
def profile(request):
return render(request,'profile.html',context = {'username':'lisi'})
模板中的变量支持点(.)的形式,以person.username为例,解析方式如下:
- 若person为字典,查看字典中username对应的值。
- 若person为对象,查看对象中username属性值。
- 若person是列表或者元组,可以使用person.1访问第一个值。
注意:不能通过中括号访问字典和列表中的值,比如dict[’'key]是错误的形式。
5.3.2 常用的模板标签
所有的标签都需要使用{% %}进行包裹。
5.3.2.1 if标签
if标签中可以使用==、!=、<、<=、>、>=、in、not in、is、is not等判断运算符,结尾使用{% endif %}。
{% if "F-35" in planes%}
<p>F-35</p>
{% else %}
<p>RC-135</p>
{% endif %}
5.3.2.2 for … in …标签
遍历列表、元组、字符串、字典等一切可以遍历的对象。
{% for person in persons %}
<p>{{person,name}}</p>
{% endfor %}
如果要反向遍历,可以在遍历最后加一个reversed。
{% for person in persons reversed %}
<p>{{person,name}}</p>
{% endfor %}
遍历字典的时候,需要使用items、keys、values等方法,在DTL中,不能使用圆括号的形式。
{% for key,value in person.items %}
<p>key:{{ key }}</p>
<p>key:{{ value }}</p>
{% endfor %}
在for循环中,DTL提供了一些变量。
- forloop.counter:表示当前循环的下标,从1开始计数。
- forloop.counter0:表示当前循环的下标,从0开始计数。
- forloop.revcounter:表示当前循环倒数下标,从1开始计数。
- forloop.revcounter0:表示当前循环倒数下标,从0开始计数。
- forloop.first:表示是否是第一次遍历。
- forloop.last:表示是否是最后一次遍历。
- forloop.parentloop:表示上一级for循环,前提是必须得有多层循环嵌套。
5.3.2.3 for … in … empty标签
如果遍历的对象中没有元素,会执行empty中的内容。
{% for person in persons %}
<li>{{ person }}</li>
{% empty %}
<p>暂时还没任何人</p>
{% endfor %}
5.3.2.4 with标签
定义变量。
context = ["张三","李四"]
{% with lisi=person.1 %}
<p>{{ lisi }}</p>
{% endwith %}
注意:
- with语句中定义的变量智能在,{% with … %}{% endwith %}中使用。
- 定义变量时候,“=”两边不能留有空格,如:
{% with lisi = person.1 %}
{% endwith %}
- 可以使用as进行变量定义:
context = ["张三","李四"]
{% with person.1 as lisi %}
<p>{{ lisi }}</p>
{% endwith %}
5.3.2.5 url标签
5.3.2.6 spaceless标签
5.3.2.7 autoescape标签
5.3.2.8 verbatim标签
更多的标签请参考官方文档: