Django2.0笔记(python3)

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函数
  1. app包含urls,可以指定命名空间。
  2. 包含一个列表或者元组,这个元组又包含path或者re_path函数。
4.2.5url反转

知道视图函数,反转到他的url,使用reverse实现。

reverse("list")
>/book/list/
4.2.6自定义url转换器
  1. 定义一个类。
  2. 在类中定义一个属性regex,用来保存url转换器规则的正则表达式。
  3. 实现to_python(self,value)方法,转换url的值,并将值传递给视图函数。
  4. 实现to_urls(self,values)方法,做url反转,将传递进来的参数转换后拼接成一个正确的url。
  5. 将定义好的转换器,注册到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标签

更多的标签请参考官方文档:

(持续更新中,喜欢的话可以点个赞,学习django,原来这么简单)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值