- List item
安装django
python.exe -m pip install --upgrade pip
创建项目的指令
django-admin startproject 项目名称
$ cd 项目名称
$ python3 manage.py runserver 0.0.0.0:5000
python3 manage.py startapp 创建应用
如:python3 manage.py startapp hids_01_test
在 settings.py 中配置应用, 让此应用能和整个项目 融为一体
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'hids_01_test',
]
settings.py 文件配置
True 表示开发环境中使用 调试模式(用于开发 中)
设置允许访问到本项目的网络地址列表
DEBUG = Trueip
ALLOWED_HOSTS = ['127.0.0.1', 'ip']
http://ip:5000/admin/
中文 : “zh-Hans”
中国时区 : “Asia/Shanghai”
LANGUAGE_CODE = 'zh-Hans'
TIME_ZONE = 'Asia/Shanghai'
配置路由
views.py下配置
from django.http import HttpResponse
def hids_log(request):
html = "<h1>hello</h1>"
return HttpResponse(html)
urls.py下配置
from . import views
urlpatterns = [
path('admin/', admin.site.urls),
path('hids_log/', views.hids_log),
]
访问:
ip:5000/hids_log/
django应用及分布式路由
创建应用
如:python3 manage.py startapp hids_01_test
在 settings.py 中配置应用, 让此应用能和整个项目 融为一体
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'hids_01_test',
]
配置主路由:urls.py
from django.urls import include
urlpatterns = [
path(' hids_01_test/', include('hids_01_test.urls')),
]
include(‘应用名.urls’)
配置应用路由:urls.py
from django.urls import path
from . import views
urlpatterns = [
path('commit_log/', views.commit_log),
path('commit_hids_log/', views.commit_hids_log),
]
配置应用views.py
from django.shortcuts import render
from django.http import HttpResponse
def commit_log(request):
html = "<h1>hello hids_01_test commit_log</h1>"
return HttpResponse(html)
def commit_hids_log(request):
html = "<h1>hello hids_01_test commit_hids_log</h1>"
return HttpResponse(html)
访问链接看结果
ip:5000/hids_01_text/commit_log/
ip:5000/hids_01_test/commit_hids_log/
模板的配置
创建模板文件夹 项目名/templates
配置settings.py内的
TEMPLATES变量对应的
'DIRS': [os.path.join(BASE_DIR, 'templates')],
在templates下新建html文件,如com.html
<body>
com html
</body>
配置主路由 urls.py
path('com_html/', views.com_html),
配置views.py
from django.shortcuts import render
def com_html(request):
return render(request, 'com.html')
访问:
http://ip:5000/com_html/
模板的继承
模板继承可以使父模板的内容重用,子模板直接继承父模板的全部内容并可以覆盖父模板中相应的块
定义父模板中的块 block标签
标识出哪些在子模块中是允许被修改的
block标签:在父模板中定义,可以在子模板中覆盖
{% block block_name %}
定义模板块,此模板块可以被子模板重新定义的同名块
覆盖
{% endblock block_name %}
继承模板 extends 标签(写在模板文件的第一行)
子模板继承语法标签
{% extends '父模板名称' %}
如:
{% extends 'base.html' %}
子模板 重写父模板中的内容块
{% block block_name %}
子模板块用来覆盖父模板中 block_name 块的内容
{% endblock block_name %}
重写的覆盖规则
不重写,将按照父模板的效果显示
重写,则按照重写效果显示
注意
模板继承时,服务器端的动态内容无法继承
如:
父模板 Navigation_Tmplate.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
{% block title_html %}
<title>Navigation_Tmplate</title>
{% endblock title_html %}
</head>
<body>
{% block head_html %}
<h3>Navigation_Tmplate head_html</h3>
{% endblock head_html %}
{% block body_html %}
<h3>Navigation_Tmplate body_html</h3>
{% endblock body_html %}
{% block tail_html %}
<h3>Navigation_Tmplate tail_html</h3>
{% endblock tail_html %}
</body>
</html>
子模板subtemplate.html
{% extends 'Navigation_Tmplate.html' %}
{% block title_html %}
<title>subtemplate</title>
{% endblock title_html %}
{% block body_html %}
<h3>subtemplate body_html</h3>
{% endblock body_html %}
访问
http://ip:5000/base_view/
http://ip:5000/sub_view/
App应用下新建模板
Views.py内配置
def hids_log(request):
return render(request, 'hids_01_test/hids_log.html')
hids_log.html内配置
{% extends 'Navigation_Tmplate.html' %}
{% block title_html %}
<title>hids_log</title>
{% endblock title_html %}
{% block body_html %}
<h3>hids_log body_html</h3>
{% endblock body_html %}
http://ip:5000/hids_01_test/hids_log/
配置静态文件
settings.py文件内
STATIC_URL = '/static/'
STATICFILES_DIRS = (os.path.join(BASE_DIR, "static"),)
项目根目录下新建static文件夹
引用静态文件
{% load static %}
实现导航栏
http://127.0.0.1:5000/base_view/
http://127.0.0.1:5000/hids_01_test/hids_log/
下拉导航栏
引用方式:
Urls.py路由:
urlpatterns = [
path('base_view/', views.base_view, name="base_view_url_name"),
]
在html中引用的三种方式:
<!-- 不带‘/’的相对地址 -->
<a class="nav-link" href="../../base_view">主页面</a>
<!-- 带‘/’的相对地址 -->
<a class="nav-link" href="/base_view">主页面</a>
<!-- url反向解析版本 -->
<a class="nav-link" href="{% url 'base_view_url_name' %}">主页面</a>
在views.py中引用(反向解析版本):
调用django中的reverse方法进行反向解析:
# url反向解析版本
from django.http import HttpResponseRedirect
from django.urls import reverse
url = reverse("base_view_url_name", args=[], kwargs={})
return HttpResponseRedirect(url)
上传文件
配置文件的访问路径和存储路径
在settings.py中配置
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
需要额外配置主路由:urls.py
主路由中添加 路由
from django.conf import settings
from django.conf.urls.static import static
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
针对403解决方案
方案一:在html中添加
{% csrf_token %}
方案二:在views.py对应函数上添加装饰器
from django.views.decorators.csrf import csrf_exempt, csrf_protect
@csrf_exempt
def hids_log(request):
pass
访问:
http://127.0.0.1:5000/hids_01_test/hids_log/
文件存储路径: