Django 学习笔记

246次阅读
没有评论

创建项目

在终端执行以下命令

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_worldmain/ 地址下

向项目的 setings.py 中的 INSTALLED_APPS 列表中添加以下内容

 'main.apps.MainConfig'
  • 本质就是添加了 main.apps 里面的 MainConfig

模型层

负责和 django 和数据库通信 连接数据库 获取数据并转换为 django 对象 让 django 使用

对应的配置在 setings.pyDATABASES 字典里面

在 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.pyArticle模型添加以下代码

# 设置控制台模型的数据列表标题
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.pyurlpatterns的列表添加映射

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.pyurlpatterns添加

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.pyurlpatterns添加

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.pyMIDDLEWARE列表的 关闭 csrf 防御 开发的时候关闭

'django.middleware.csrf.CsrfViewMiddleware'
正文完
 0
评论(没有评论)