创建项目
在终端执行以下命令
django-admin startproject django_study
项目结构
文件夹或文件 | 作用 |
---|---|
django_study | 执行 django-admin startproject 命令创建项目的名称就是文件名称 存放 django 项目的主要文件 |
manage.py | 项目管理文件 |
django_study 目录 | 作用 |
---|---|
setings.py | 项目配置文件 |
urls.py | 项目路由文件 |
wsgi.py | wsgi 通信文件 |
运行项目
python manage.py runserver
- 地址默认
http://127.0.0.1:8000/
创建 App
在终端执行以下命令 创建 app 名称为 main
python manage.py startapp main
App 结构
文件 | 作用 |
---|---|
views.py | 显示页面处理 |
models.py | 定义模型 |
admin.py | admin 模块管理 |
apps.py | 声明应用 |
tests.py | 测试的地方 |
urls.py | 需要自己创建路由管理 |
Hello World
在 app 的 views.py
文件添加以下代码
# 网页实现代码
def hello_world(request):
return HttpResponse("Hello World!")
在 app 里面创建 urls.py
添加以下代码
from django.urls import path
# 导入网页实现代码
from main import views
urlpatterns = [
# 把实现代码映射到 hello_world 路径下
path("hello_world", views.hello_world),
]
在项目 urls.py
里面的 urlpatterns
列表添加以下内容 而且导入 django.urls
里面的 include
函数
path('main/', include('main.urls'))
- 把 app 里面的
urls
配置导入这里 把上面的映射了hello_world
到main
/ 地址下
向项目的 setings.py
中的 INSTALLED_APPS
列表中添加以下内容
'main.apps.MainConfig'
- 本质就是添加了
main.apps
里面的MainConfig
类
模型层
负责和 django 和数据库通信 连接数据库 获取数据并转换为 django 对象 让 django 使用
对应的配置在 setings.py
的 DATABASES
字典里面
在 app models.py
里面添加以下代码
# Create your models here.
from django.db import models
# 创建数据表 表名为 Article
class Article(models.Model):
# 文章 id primary_key=True 设置为主键
article_id = models.AutoField(primary_key=True)
# 文章标题
article_title = models.TextField()
# 文章部分
brief_content = models.TextField()
# 文章内容
content = models.TextField()
# 文章日期 auto_now_add=True 没有日期 默认就是当前时间就是发布日期
data = models.DateTimeField(auto_now=True)
打开终端执行以下命令
python manage.py makemigrations
- 本质就是生成创建数据表的配置类代码
再执行以下命令
python manage.py migrate
- 本质就是使用配置类 执行创建数据表操作
Shell
打开终端执行以下命令
python manage.py shell
- 本质 进入到 django 的 python 解释器环境
执行以下代码向数据库中添加数据
from main.models import Article
article = Article()
article.article_title = " 测试标题 "
article.brief_content = " 部分测试内容 "
article.content = " 测试内容 "
article.save()
查询数据库中的内容
articles = Article.objects.all() # 查询所有的文章内容
print(articles[0].article_title)
print(articles[0].brief_content)
print(articles[0].content)
Admin
管理的用户和模型的地方
输入以下命令创建 ` 管理员 用户
python manage.py createsuperuser
在 app 目录的 admin.py
注册模型添加到控制台进行管理 添加以下代码
# Register your models here.
from main.models import Article
admin.site.register(Article)
在 app 目录下的 models.py
的Article
模型添加以下代码
# 设置控制台模型的数据列表标题
def __str__(self):
return self.article_title
读取数据库数据并生成网页
在 app 目录的 views.py
添加以下代码
from django.http import HttpResponse
from main.models import Article
def articles(request):
html_body = ""
# 遍历数据库的数据
for article_data in Article.objects.all():
article_title = "<h1>{title}</h1>".format(title=article_data.article_title)
article_brief_content = "<p>{brief_content}</p>".format(brief_content=article_data.brief_content)
article_content = "<p>{body}</p>".format(body=article_data.content)
# 打错了 data 应该是 date
article_date = "<p>{date}</p>".format(date=article_data.data)
html_body = html_body + article_title + article_brief_content + article_content + article_date
html = "<html><body>{body}</body></html>".format(body=html_body)
return HttpResponse(html)
def hello_world(request):
return HttpResponse("Hello World!")
在 app 目录的 usrs.py
的urlpatterns
的列表添加映射
path("articles", views.articles)
模版
使用固定模版生成网页
语法 | 作用 |
---|---|
{{变量名}} | 变量 |
{% for x in list %} | 开始 for 循环 |
{% endfor %} | 结束 for 循环 |
{% if %} | 开始判断 为 true 执行代码 |
{% else %} | 如果 if 不为 true 执行 else 里面的 代码 |
{% endif %} | 结束判断 |
更多语法:Django 模板 | 菜鸟教程 (runoob.com)
在 app 目录创建 templates
文件夹存放模版文件index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title> 模版 </title>
</head>
<body>
<h2> 遍历列表 </h2>
{# 遍历类属性列表 #}
{% for article_item in article_data %}
{# 使用类属性 格式:类名. 类属性 #}
<h1>{{article_item.article_title}}</h1>
<p>{{article_item.brief_content}}</p>
<P>{{article_item.content}}</P>
<P>{{article_item.data}}</P>
<h2> 判断使用 </h2>
{# 进行判断操作 #}
{% if article_item.article_title == " 测试标题 " %}
<p> 等于测试标题 </p>
{% else %}
<p> 不等于测试标题 </p>
{% endif %}
{% endfor %}
<h2> 变量调用 </h2>
{# 使用变量 格式:变量名 #}
<p>{{variables}}</p>
<h2> 字典调用 </h2>
{# 使用字典 格式:字典名. 键名 #}
<p>{{dict.key}}</p>
<h2> 列表调用 </h2>
{# 使用列表 格式:列表名. 键名 #}
<p>{{list.0}}</p>
<h2> 字符串长度 </h2>
{# 使用变量 格式:变量名 #}
<p>{{variables|length}}</p>
<h2> 字典键值对数量 </h2>
{# 使用字典 格式:字典名. 键名 #}
<p>{{dict|length}}</p>
<h2> 列表值的数量 </h2>
{# 使用列表 格式:列表名. 键名 #}
<p>{{list|length}}</p>
</body>
</html>
在 app 目录 urls.py
添加实现代码
from django.shortcuts import render
from main.models import Article
def index(request):
articles_list = Article.objects.all()
test_dict = {'key': " 字典值 "}
test_list = [" 列表数据 1 ", " 列表数据 2 "]
# 第一个参数传入请求 第二个设置模版文件路径 第三个使用字典形式传入变 键为模版变量名必须名字一样 值为 python 类对象或数据类型
return render(request, 'index.html', {'article_data': articles_list,
"variables": " 测试变量 ",
"dict": test_dict,
"list": test_list
})
获取访问路径提交的信息
在 app 目录 url.py
的urlpatterns
添加
path("path/<str:get_data>", views.path_date)
- 获取访问路径后面提交的额外信息 格式:
/< 数据类型: 变量名 >
在 app 目录 views.py
的增加函数
def path_date(request, get_data):
return HttpResponse(" 路径的额外信息:{path}".format(path=get_data))
- 函数形参要添加上面变量名同样的形参
处理 Get 和 Post 请求
在 app 目录 url.py
的urlpatterns
添加
path("get", views.get_function),
path("post", views.post_function)
在 app 目录 views.py
的增加函数
# get 方法
def post_function(request):
post = request.POST.get("post")
return HttpResponse(post)
# post 方法
def path_date(request, get_data):
return HttpResponse(" 路径的额外信息:{path}".format(path=get_data))
注释掉项目目录的 setings.py
的MIDDLEWARE
列表的 关闭 csrf
防御 开发的时候关闭
'django.middleware.csrf.CsrfViewMiddleware'