文章目录
配置流程
1、配置路由
urls.py -> urlpatterns = [ ] 中添加路由
path/url/re_path('index', views.index)
‘index’ 是路由地址 http://127.0.0.1:8000/index
views.index 是 路由地址的事件- 路由有四种
2、设置路由地址的事件
views.py -> def index()
- 定义一个函数,该函数至少有一个参数request,并且返回一个HttpResponse对象
- request包含的参数(path/scheme/method等)
- 返回的HttpResponse对象有三种类型
3、编写事件返回的html页面
template文件夹下
路由
- 普通路由
path(route, view, kwargs, name)
name:反向解析
(1)在模板中
url('^$', views.index, name="index")
<a href="{% url 'index' %}">首页</a>
# 有参数时:
path('<path:path>', views.path, name="path")
<a href="{% url 'path' 'upload' %}">上传资料</a>
# 项目路由和应用路由重名时,命名空间/namespace:
# 在应用的urls.py中(项目路由中不能使用)
app_name = "user"
url('^$', views.index, name="index")
<a href="{% url 'user:index' %}">用户首页</a>
(2)重定向中
from django.shortcuts import reverse
redirect(to=reverse("index"), args=())
redirect(to=reverse("user:index"), args=())
- 参数路由
可以拿到路由参数
path(‘python/’, view, kwargs, name)
kwargs 字典格式 静态参数
参数路由的参数有几种类型:
# 内置类型转换器
converters
path 换行符外所有str
str /外的所有字符串
{str/int/path/slug/uuid}
path('python/<int: id>', view, kwargs, name)
# 自定义类型转换器
# 1. 仿照IntConverter类的写法
class IntConverter:
regex = '[0-9]+'
def to_python(self, value):
return int(value)
def to_url(self, value):
return str(value)
# 2. 然后在urls.py中注册类型转换器:
DEFAULT_CONVERTERS = {
'int': IntConverter(),
'path': PathConverter(),
'slug': SlugConverter(),
'str': StringConverter(),
'uuid': UUIDConverter(),
}
- 正则路由
from django.conf.urls import url
from django.urls import re_path
# url函数
url(r'[0-9]+', views.index) # 无法获取路由参数
url('index/(?P<id>[0-9]+', view))
# re_path函数
re_path(r"^list/(?P<year>\d{4})/$",views.list)
- 分布式路由
HttpResponse对象
from django.http.response import HttpResponse
from django.shortcuts import render, redirect
# 返回一个文本信息
return HttpResponse("用户名或密码错误!")
# 转发,返回一个html页面
return render(request, "login.html")
# 重定向,至一个路由地址
return redirect(to='/')
-
转发是服务器默认的跳转方式,转发至页面,使用render(request, “login.html”)
地址栏地址不变;一次请求;可以携带数据到模板;只能内部转发 -
重定向,至路由,使用redirect(to="/login")
地址栏变,两次请求,不带数据,可以重定向到外部请求(to=“http://www.baidu.com”)
redirect时,服务器响应一个response header,包含content-length,location(重定向的路由地址),303状态码
浏览器接收到该头信息后,向location发送请求
request包含的参数
请求路由:path
请求方法:method
request.GET:
只能接收以get形式提交的参数
?name=zhangsan&name=lisi
请求协议:scheme
请求主机:get_host
请求端口:get_port
请求参数:params
http://www.baidu.com/s?keyword=图片
协议 域名(端口 80) 请求路由 请求参数
获取参数:
get(key, default=None)
# 获取单值,返回str
getlist(key, default=None)
# 获取多值,返回列表
dict()
# 获取字典类型的参数
# 参数中某键如有多值,只能获取最后一个
# {"name":"zhangsan", "age":"20", "hobby":"爬山"}
django模板标签
-
获取数据
{{ key }}
-
for
{% for 变量 in 循环对象 %}
循环体中的内容
{% empty %}
循环的对象如果为空,则执行这里的代码
{% endfor %}
# 在 for 循环中,提供了一个 内置的对象forloop
forloop.counter
forloop.counter0
forloop.revcounter0
forloop.revcounter
forloop.first
forloop.last
- if
{% if 条件 %}
{% elif 条件 %}
{% else %}
{% endif %}
- include
- extend/block
# 继承父模板
{% extend 'xxx.html' %}
{% block block1 %}
内容
{% endblock%}
新建app
1、新建一个应用
django-admin startapp 应用名
该命令必须在项目的根下运行
2、在settings.py
中激活应用
INSTALLED_APPS = [
.... ,
'user',
]
3、在项目路由中,配置 应用路由
url('^user/', include('user.urls'))
django配置静态资源
1、在项目的根下、新建一个 static 文件夹
2、在 settings.py
中,配置 static 文件夹的 位置
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static"),
]
3、在模板页面中, 引入 静态资源文件
/static/css/index.css
文件上传
-
模板
<form action="reg_2" id="myform" method="post" autocomplete="off" enctype="multipart/form-data">
method: post
enctype: multipart/form-data -
在 django 中,接收文件对象 request.FILES
file = request.FILES.get(“key”)
file 常见的方法有那些?
read() : 把文件读取并放入一个 流中,是一次性读取完成,适合于小图片
chunk() : 以块的方式读取一个文件,适合于 大文件的读取