第二单元 初识Django下

2.1 模板页面

2.1.1 模板页面返回

模板配置

需要打开settings.py文件,找到TEMPLATES选项,修改其中的DIRS属性,在这里添加我们的html文件夹位置

print('==========')
print(BASE_DIR)  # 根路径

TEMPLATES = [   # 模板配置
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],  # 配置路径
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

创建模板

在项目根目录下创建与配置同名的文件夹template文件,并命名为index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>hi</title>
</head>
<body>
	<h3>这是一个模板页面</h3>
</body>
</html>

视图渲染

有了html,目录也配置好了,那么紧接着就是让视图去返回这个文件views文件,那么现在我们要引入一个新的方法叫做render,这个方法专门用来返回一个html页面

from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.


# 视图函数
# 定义 request
def MyView(request):
    # return HttpResponse('<h1>这是我第一个视图</h1>')  # 返回一个响应
    content = {
        'money': 300,
        'scores': [125, 36, 38, 39, 165],
        'game': {
            'name': '彤彤',
            'age': '18',
            'sex': '女',
            'ai': '女朋友',
        }
    }
    # return render(request, 'index.html', {'money': 100}) # 返回一个模板页面
    return render(request, 'index.html', content)  # 2.返回一个模板页面

2.1.2 模版变量渲染

现在我们可以使用模版变量来解决这个问题,页面处数据变化的位置,我们不再写死,而是通过一种特殊的语法,叫做模版变量的形式来展示天气这部分数据,这个语法类似这样

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h3>这是一个模板页面</h3>
    <p>我兜里有多少钱{{ money }}</p>
</body>
</html>
from django.shortcuts import render
from django.http import HttpResponse
from myapp.models import Game

# Create your views here.


# 视图函数
# 定义 request
def MyView(request):
   
    content = {
        'money': 300,
        'scores': [125, 36, 38, 39, 165],
        'game': {
            'name': '彤彤',
            'age': '18',
            'sex': '女',
            'ai': '女朋友',
        }
    }
    return render(request, 'index.html', {'money': 100}) # 返回一个模板页面
    return render(request, 'index.html', content)  # 2.返回一个模板页面

2.1.3 模版语句循环、分支

for标签

模板中的标签{% for %}与Python中的for循环类似,要记得有闭合模板标签{{ endfor }}

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <p>
        彤彤身上的数字为
        {% for score in scores %}
        {{ score }}
        {% endfor %}
    </p>
</body>
</html>

if 标签

在模版中,可以通过{% if %}标签语法来进行模板变量的值判断;

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
 <p>
        {% if money > 200 %}
            你真是个有钱人
        {% else %}
            你真穷
        {% endif %}
    </p>
</body>
</html>

2.2 静态资源

2.2.1 静态资源概念

引入一些css*、imgjs静态资源

2.2.2 静态资源路径配置

settings中配置静态文件目录路径,

# 静态路径
STATIC_URL = '/static/'  # 静态
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]

2.2.3 静态资源模板使用

html使用

<!DOCTYPE html>
<html lang="en">
    {% load staticfiles %}
<head>
    <meta charset="UTF-8">
    <title>hi</title>
</head>
<body>
    <p>彤彤的美照</p>
    {% load staticfiles %}
    <img src="{% static '彤彤.jpg' %}">
    <p>
</body>
</html>

2.3 ORM映射

2.3.1 映射概念

ORM映射关系,是django与数据库之间的一个桥梁,直接通过一套ORM所提供的API接口即可方便对各种数据库进行交互

2.3.2 模型类编写

配置数据库

# 数据库
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',  # 使用mysql数据库
        'HOST': 'localhost',  # 主机
        'PORT': 3306,  # 端口
        'USER': 'root',  # 用户名
        'PASSWORD': '123',  # 密码,根据自己的密码来
        'NAME': 'game',  # 数据库
    }
}

安装数据库
在创建的项目中找到***init.py***文件,并安装

# 安装数据库
import pymysql
pymysql.install_as_MySQLdb()

然后进入到myapp下的models.py文件中,编写一个类,这个类就对应数据库中的一张表

通过ORM映射在models.py文件中创建模型类

from django.db import models

# Create your models here.
# 模型类 会自动生成 id字段
class Game(models.Model):
    # CharField 字符串   max_length 最大程度   verbose_name 后台管理的字段名
    name = models.CharField(max_length=20, verbose_name='角色名')
    # IntegerField 整型
    atk = models.IntegerField(verbose_name='攻击力')
    level = models.IntegerField(verbose_name='等级')

当某个子应用myAPP涉及到了数据库的使用时,要记得在settings文件中进行配置

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    'myapp',  # 注册子应用
]

2.3.3 生成迁移文件和执行迁移

python manage.py makemigrations # 创建数据库迁移文件
python manage.py migrate # 根据数据库迁移文件生成对应 SQL 语句并执行

2.4 admin控制台

2.4.1 admin控制台概念

admin控制台是 django 为我们提供的一个便捷的来管理数据库的界面

2.4.2 创建超级用户

python manage.py createsuperuser

还需要通过对应app下的admin.py文件进行admin后台注册,只有注册在这个文件中的模型类对应的表才可以在admin界面所看到

from django.contrib import admin
from myapp.models import Game
# Register your models here.

admin.site.register(Game)

2.5 ORM视图操作

2.5.1 通过ORM操作模型类

from myapp.models import Game
    # 3.MVT三层联动
    # 通过Game模型类,取出数据块中的数据(ORM操作),取出所有角色信息
    game_data = Game.objects.all()
    content = { # 传递给页面的数据,字典
        'games': game_data,
    }
    # render 返回一个模板类型
    return render(request,'index2.html',content)

2.5.3 模版页面数据渲染ORM操作结果

修改一下对应的要渲染的 HTML 页面,使其渲染遍历出每一条数据、

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h3>展示数据库中的角色信息</h3>
    {% for game in games %}
        {{ game.id }} {{ game.name }} {{ game.atk }} {{ game.level }}<br>
    {% endfor %}
    <table border="1px" width="500px">
        <tr>
            <td>编号</td>
            <td>角色名</td>
            <td>攻击力</td>
            <td>等级</td>
        </tr>

        {% for game in games %}
        <tr>
            <td>{{ game.id }}</td>
            <td>{{ game.name }}</td>
            <td>{{ game.atk }}</td>
            <td>{{ game.level }}</td>
        </tr>
        {% endfor %}
    </table>
</body>
</html>

路由

urls.py

from django.contrib import admin
from django.urls import path

from myapp import views


# 主路由
urlpatterns = [
    path('admin/', admin.site.urls),
    path('myview/',views.MyView),
]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值