Django 学习笔记

232次阅读
没有评论

创建项目

在终端执行以下命令

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 = "

{title}

".format(title=article_data.article_title) article_brief_content = "

{brief_content}

".format(brief_content=article_data.brief_content) article_content = "

{body}

".format(body=article_data.content) # 打错了 data 应该是 date article_date = "

{date}

".format(date=article_data.data) html_body = html_body + article_title + article_brief_content + article_content + article_date html = "{body}".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




    
    模版



遍历列表

{# 遍历类属性列表 #} {% for article_item in article_data %} {# 使用类属性 格式:类名. 类属性 #}

{{article_item.article_title}}

{{article_item.brief_content}}

{{article_item.content}}

{{article_item.data}}

判断使用

{# 进行判断操作 #} {% if article_item.article_title == "测试标题" %}

等于测试标题

{% else %}

不等于测试标题

{% endif %} {% endfor %}

变量调用

{# 使用变量 格式:变量名 #}

{{variables}}

字典调用

{# 使用字典 格式:字典名. 键名 #}

{{dict.key}}

列表调用

{# 使用列表 格式:列表名. 键名 #}

{{list.0}}

字符串长度

{# 使用变量 格式:变量名 #}

{{variables|length}}

字典键值对数量

{# 使用字典 格式:字典名. 键名 #}

{{dict|length}}

列表值的数量

{# 使用列表 格式:列表名. 键名 #}

{{list|length}}

在 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/", 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
评论(没有评论)