初步了解Django框架

目录

    • 创建一个django项目
      • [1,vscode安装 "python"扩展](#1,vscode安装 “python”扩展)
      • [2,创建一个 django项目](#2,创建一个 django项目)
    • 了解目录
    • 创建app
    • 安装postgreSQL
    • [创建 demo_app model](#创建 demo_app model)
    • [创建 demo_app views/urls/tempaltes](#创建 demo_app views/urls/tempaltes)
    • [创建全局 html文件](#创建全局 html文件)
    • [Django 模板语法](#Django 模板语法)
    • 其他

Django是一个高级的PythonWeb应用框架,可以快速开发安全和可维护的网站。

Django遵循一种称为MTV(模型-模板-视图)模式的架构模式。

创建一个django项目

1,vscode安装 "python"扩展

2,创建一个 django项目

plain 复制代码
# 新增一个文件夹 djangoDemo
cd djangoDemo

# 虚拟环境env
python -m venv env

#激活虚拟环境
.\env\Scripts\activate

# 安装 django
pip install django

# 利用 django创建项目
django-admin startproject [项目名]

# 运行开发服务
cd [项目名]
python manage.py runserver

浏览器输入 http://127.0.0.1:8000/ 可以打开页面代表创建成功

了解目录

plain 复制代码
demo
|----demon
|      |---- _pycache_
|      |---- _init_.py // 表示这个目录属于python模块
|      |---- asgi.py // 异步功能
|      |---- settings.py // web服务器所需要的设置,比较重要
|      |---- urls.py  
|      |---- wsgi.py
|----demo_app
|      |---- _pycache_
|      |---- migations // 数据库架构的一个记录
|      |---- templates // 存放html文件
|      |---- _init_.py // 表示这个目录属于python模块
|      |---- admin.py // django 后台管理
|      |---- apps.py // 不需要管
|      |---- models.py // 数据库数据表相关
|      |---- tests.py // 运行测试程序
|      |---- views.py // 处理逻辑返回http response
|----manage.py // 项目的根目录

创建app

plain 复制代码
python manage.py startapp [app名称]

在demo>settings.py中添加我们新增的 app

安装postgreSQL

1,安装postgreSQL数据库:https://www.postgresql.org/,并将bin目录添加到系统环境变量中;

2,psycopg2 是一个用于 Python 的 PostgreSQL 数据库驱动程序。在使用 Django 中的 PostgreSQL 数据库前,需要先安装 psycopg2

pip install psycopg2

3, 在 settings.py中设置数据库配置

plain 复制代码
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'postgres', // 安装postgresql默认的数据库名称
        'USER': 'postgres', //安装postgresql默认的user名称
        'PASSWORD': '123456', // 应该是安装postgresql的时候自己设置的密码
        'HOST': 'localhost',
        'PORT': '5432',
    }
}

在settings.py文件中完成postgreSQL数据库配置后,需要以命令形式同步数据库,在根目录下执行命令:

python manage.py makemigrations

python manage.py migrate

创建 demo_app model

plain 复制代码
# demo_project -> urls.py 有个admin路径
浏览器输入:http://127.0.0.1:8000/admin 打开一个后台登录页

# 创建一个管理员账户
python manage.py createsuperuser
plain 复制代码
# demo_app -> models.py 创建有个Todo数据表,有2个字段(name,due_date),

class Todo(models.Model):
    name = models.CharField(max_length=100)
    due_date = models.DateField()

    // 对name做处理
    def __str__(self):
        return self.name

# demo_app -> admin.py 讲models.py新增的Todo,添加到后台管理页面中
from .models import Todo
admin.site.register(Todo)

# 同步数据库
python manage.py makemigrations
python manage.py migrate

创建 demo_app views/urls/tempaltes

plain 复制代码
# demo_app -> views.py # 处理逻辑返回 http response

from django.http import HttpResponse
def todo_list(request):
    return HttpResponse('todo list')

# demo -> urls.py
urlpatterns = [
    path('', todo_list), # 在 根目录 路径下下使用 todo_list函数处理
]

页面显示 "todo list"
plain 复制代码
# demo_app -> views.py

from django.shortcuts import render
def todo_list(request):
    return render(request, 'todo_list.html')

# demo_app -> templates 文件夹新建一个 todo_list.html
<html>
    <head>
        <title>Todo List</title>
    </head>
    <body>
        <h1>todo_list.html</h1>
    </body>
</html>

页面显示 "todo_list.html"的内容

创建全局 html文件

plain 复制代码
1,在项目的跟目录下 新建 templates 文件夹,里面新增todo_list.html文件
<html>
    <head>
        <title>Todo List</title>
    </head>
    <body>
        <h1>全局 todo_list.html</h1>
    </body>
</html>

2,demo -> settings.py
import os

BASE_DIR = Path(__file__).resolve().parent.parent # 获取当前文件所在目录

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')], # 当前文件所在目录下的 templates 目录
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

    

Django 模板语法

templates 文件夹里面存放 html文件,可以在html文件显示response 返回的数据

plain 复制代码
{% if condition %} # 条件判断
{% if not condition %} # 否定条件判断
{% for item in list %}	# 循环遍历
{{ variable }}	# 输出变量值
{% endif %}, {% endfor %}	# 结束标签

例如:
<html>
    <head>
        <title>Todo List</title>
    </head>
    <body>
        {% if not request.user.is_authenticated %} 
        <h1>您好,{{request.user.username}}还未登录</h1>
        {% else %}
            <h2>{{request.user.username}}的Todo:</h2>
            <ul>
                {% for todo in todo_list %}
                <li>{{ todo.name }},截至时间 {{todo.due_date}}</li>
                {% endfor %}
            </ul>
        {% endif %}
    </body>
</html>

其他

plain 复制代码
# 用户对象特性
request.user.is_authenticated # 判断用户是否登录 返回 Boolean
相关推荐
闻道且行之11 小时前
TurboOCR:基于PP-OCRv6的极速Windows离线OCR工具,深度解析3.4GB依赖背后的技术架构
c++·人工智能·python·qt·机器学习·ocr
许彰午12 小时前
95_Python内存管理与垃圾回收
开发语言·python
多加点辣也没关系12 小时前
JavaScript|第13章:原始类型的方法
开发语言·javascript·ecmascript
এ慕ོ冬℘゜12 小时前
深入理解 JavaScript 事件体系:Window、鼠标与键盘事件详解
开发语言·javascript·okhttp
骄阳如火12 小时前
Python 性能深度剖析:从“被诟病的慢”到“Rust 重塑”的拐点
python
满怀冰雪13 小时前
03-第一个 Paddle 程序:Tensor 创建、计算与设备管理
人工智能·python·paddle
CClaris13 小时前
大模型量化从0到1(九):用 llama.cpp 把模型转成 GGUF 并跑本地推理
人工智能·pytorch·python·深度学习·llama
学编程的小虎13 小时前
SenseVoice微调
人工智能·python·自然语言处理
诸葛说抛光14 小时前
国内大型汽车改装展览会定展 佛山改装 佛山汽车赛事
python·汽车
chouchuang14 小时前
day-030-综合练习-笔记管理器
开发语言·笔记·python