第二单元 初识Django下

第二单元 初识Django下,第1张

文章目录
  • 2.1 模板页面
    • 2.1.1 模板页面返回
      • 模板配置
      • 创建模板
      • 视图渲染
    • 2.1.2 模版变量渲染
    • 2.1.3 模版语句循环、分支
      • for标签
      • if 标签
    • 2.2 静态资源
      • 2.2.1 静态资源概念
      • 2.2.2 静态资源路径配置
      • 2.2.3 静态资源模板使用
    • 2.3 ORM映射
      • 2.3.1 映射概念
      • 2.3.2 模型类编写
      • 2.3.3 生成迁移文件和执行迁移
    • 2.4 admin控制台
      • 2.4.1 admin控制台概念
      • 2.4.2 创建超级用户
    • 2.5 **ORM视图 *** 作**
      • 2.5.1 通过ORM *** 作模型类
      • 2.5.3 模版页面数据渲染ORM *** 作结果
    • 路由

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>hititle>
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('这是我第一个视图')  # 返回一个响应
    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>Titletitle>
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>Titletitle>
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>Titletitle>
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>hititle>
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),
]

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/738395.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-28
下一篇 2022-04-28

发表评论

登录后才能评论

评论列表(0条)

保存