1、项目同名文件夹python/python
- _init_ : python包的初始化文件
- wsgi.py : WEB服务网管的配置文件 - Django正式启动时需要用到
- urls.py : 项目的主路由配置 - HTTP请求进入Django时,优先调用该文件
- settings.py : 项目的配置文件 - 包含项目启动时需要的配置
2、settings.py
包含Django项目启动的所有配置项
配置项格式: BASE_DIR = 'xxx'
# 此文件所在的父文件夹的父文件夹,得出的是项目的绝对路径
BASE_DIR = Path(__file__).resolve().parent.parent
# 检测代码改动后,立刻重启服务
DEBUG = True
# 请求头Hosts ,访问的域名必须为允许的Hosts才能访问
ALLOWED_HOSTS = []
3、URL和视图函数
ROOT_URLCONF = 'python.urls'指定了主路由配置列表urlpatterns的文件位置
# 这里存放url和对应的视图函数
urlpatterns = [
path('admin/', admin.site.urls),
]
视图是用于接受浏览器请求并通过HttpResponse对象返回响应的函数
e.g
urlpatterns = [
path('admin/', admin.site.urls),
path('page/2003/', views.page_2003)
]
# views.py
from django.http import HttpResponse
def page_2003(request):
html = "<h1>这是第一个页面</h1>"
return HttpResponse(html)
# path转换器,page这个参数会按照关键字传入views_xxx函数里
path('page/<int:page>', views.xxx)
# 正则, /一位或两位整数/字符串/一位或两位整数,格式(?P<参数>\正则表达式)
re_path(r'^(?P<x>\d{1,2})/(?P<op>\w+)/(?P<y>\d{1,2})$', view.xxxx)
4、请求和响应
# get 和 post 请求
# views.py
from django.http import HttpResponse
post_web = '''
<form method="POST" action="/page_2003">
username:<input type="text" name="username">
<input type="submit" value="submit">
</form>
'''
def page_2003(request):
if request.method == 'GET':
print(request.GET['a'])
return HttpResponse(post_web)
elif request.method == 'POST':
print(request.POST['username'])
return HttpResponse('这是响应')
# urls.py
from django.contrib import admin
from django.urls import path
from . import views
urlpatterns = [
path('admin/', admin.site.urls),
path('page_2003', views.page_2003)
]
5、模板加载
from django.template import loader
# 1、通过loader加载模板
t = loader.get_template('模板文件名')
# 2、将t转换成HTML字符串
html = t.render(字典数据)
# 3、用响应对象将转换的字符串内容返回给浏览器
return HttpResponse(html)
from django.shortcuts import render
return render(request, '模板文件名', '字典变量')
# 字典变量在html中可以使用{{}}模板来显示
{% %} 控制标签
6、模板继承
# base.html 父模板
{% block mytitle %}
...
{% endblock %}
# sports.html 子模板
{% extends 'base.html' %} # 引用父模板
{% block mytitle %}
# 里面可以修改父模板里的内容
{% endblock %}
7、url反向解析
URL存在的地方
1、模板HTML中
<a href="/login" ></a>
<form action="/login" method="POST"> <form>
2、视图函数中
HttpResponseRedirect('/login')
反向解析
# test_url.html
<a href="{% url 'tr' '100'%}" >URL反向解析</a>
# views.py
def test_url(request, age):
return HttpResponse('<h1>haha</h1>')
# 302跳转
def test_url_result(request, age):
from django.urls import reverse
url = reserve('tr')
return HttpResponseRedirect(url)
# settings.py
path('/test_url_result/<int:age>', views.test_url(), name='tr')