模板页面
模板配置
settings.py => TEMPLATES =>进行修改DIRS属性,添加HTML文件夹位置
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,创建html文件
视图渲染
让视图返回这个文件,用render
render可以用来返回一个模板页面,并将一个字典组合成的模板变量传递到模板页面*上,完成页面的渲染
render(request, template_name, context=None)
'''
request: 固定接收 request 请求,与视图 han s 第一个参数相同
template_name: 为一个可以找到的模板页面,填写配置 template 的相对路径即可
context: 模板页面所需模板变量,是一个字典格式,key 为模版变量,value 为渲染的值
'''
def MyView(request):
# 传递给页面的数据,格式是字典
content = {
'money':100,
'score':[100,99,95,85],
'games':{'name':'鲁班','atk':'999','def':'10','level':'18'},
}
return render(request,'index.html',content) # 返回一个模板页面 传值
模板变量渲染
# 普通接收
{{var}},
# 循环
{% for var in 变量名%}
{{var}}
{% endfor %},
# 变量是字典
{% for key,value in 字典名.items %}
{{ key }} : {{ value }}<br/>
{% endfor %},
# 判断
{% if test_list %}
列表不为空
{% elif test_dict %}
列表为空,字典不为空
{% else %}
列表字典均为空
{% endif %}
修改html页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h3>这是一个模板页面</h3>
{# <p>我有{{ money }}元</p>#}
<p>
{# 循环数组#}
某小组各个成员的成绩:
{% for i in score %}
{{ i }},
{% endfor %}
</p>
<p>
{# 遍历字典 需要遍历键值对#}
游戏角色信息:<br/>
{% for key,value in games.items %}
{{ key }} : {{ value }}<br/>
{% endfor %}
</p>
<p>
{# if判断 else #}
{% if money > 200 %}
真是个有钱的人
{% else %}
真是个节俭的人
{% endif %}
</p>
</body>
</html>
静态资源
概念
引用一些类似css、img、js、等静态资源,来装饰我们的页面
静态资源路由
在settings.py配置静态资源路由
STATICFILES_DIRS = [os.path.join(BASE_DIR,'static')] # 配置静态资源
在项目创建创建static目录,里面存入一些图片
静态资源模板使用
在模板页面中引用并使用
使用静态资源要加一句话
{% load staticfiles %}
<p>图</p>
{# 使用静态资源要加下面的命令#}
{% load staticfiles %}
<img src="{% static '过程.PNG' %}">
ORM映射
ORM映射关系,是django与数据库之间的一个桥梁,可以使开发者不再关注如何去编写SQL语句,直接通过一套ORM所提供的API接口即可方便对各种数据库进行交互**
模型类编写
在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='等级')
在 settings.py进行配置,注册子应用
INSTALLED_APPS = [ # 注册
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'myapp', # 注册子应用
]
安装mysql 在项目文件夹 => init.py
# 安装数据库
import pymysql
pymysql.install_as_MySQLdb()
报256 => 打开cmd=>pip install ‘cryptog…’ =>更新
配置数据库信息
在 settingspy
配置数据库时,要创建数据库
DATABASES = { # 配置数据库 除端口外,其他都是数据库
'default': {
'ENGINE': 'django.db.backends.mysql', # 使用mysql数据库
'HOST':'localhost', # 本机 127.0.0.1
'POST': 3306, # 端口
'USER':'root', # 用户名
'PASSWORD':'123123', # 密码 自己的密码 字符串模式
'NAME':'games', # 数据库
}
}
生成迁移文件
命令不能执行第二次
python manage.py makemigrations # 创建数据库迁移文件
执行迁移
python manage.py migrate # 根据数据库迁移文件生成对应 SQL 语句并执行
添加表中数据
方法一:admin控制台
创建超级用户
注意:
- 用户名不能用中文
- 电子邮件跳过
- 密码不透明,尽量用英文上的数字
python manage.py createsuperuser
注册表admin.py
from django.contrib import admin
# 导包
from myapp.models import game
# Register your models here.
admin.site.register(game)
方法二:小黑框
MVT三层联动
views层从model拿数据
# 导入
from myapp.models import game
def MyView(request):
# 3.MVT三层联动
# 通过game模型类,取出数据库中的数据(ORM操作),取出所有角色信息
game_data = game.objects.all()
content = { # 传递给页面数据,字典模式
'games':game_data,
}
# render 返回一个模板页面
return render(request,'index2.html',content)
html渲染
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h3>展示数据库中角色信息</h3>
<table width="500px" border="1px" align="center">
<tr>
<th>编号</th>
<th>角色名</th>
<th>攻击力</th>
<th>等级</th>
</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>
总结报错
1.要安装mysql
Did you install mysqlclient---没有安装mysql
2.进入链接 把decode改成encode
File "C:\Users\asus\AppData\Local\Programs\Python\Python37\lib\site-packages\django\db\backends\mysql\operations.py", line 146, in l
ast_executed_query
query = query.decode(errors='replace')
AttributeError: 'str' object has no attribute 'decode' 报错了
3.报256 => 打开cmd=>pip install ‘cryptog…’ =>更新
4.在settings.py 配置数据库中的NAME添加数据库
File "C:\Users\asus\AppData\Local\Programs\Python\Python37\lib\site-packages\pymysql\err.py", line 143, in raise_mysql_exception
raise errorclass(errno, errval)
django.db.utils.OperationalError: (1046, 'No database selected') #报错报的没有选择数据库
5.在执行命令二时意外终止
删除库=>重新建库=>重新执行两个命令
6.python 打太快进入python页面,输入exit()退出