Django

配置流程

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文件夹下


路由

  1. 普通路由
    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=())
  1. 参数路由
    可以拿到路由参数
    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(),
}
  1. 正则路由
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)
  1. 分布式路由

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() : 以块的方式读取一个文件,适合于 大文件的读取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值