指定用于视图参数的默认值

两个路由指向同一个视图函数,并且在视图函数中给参数设置默认值

在home/urls.py文件中加入一条路径:

1
2
3
#路由
re_path(r'^user/index/(?P<page>[0-9]+)/$', views.user_index),
re_patn(r'^user/index/$', views.user_index),

编写home/views.py文件代码:

1
2
3
4
#视图函数
def user_index(request,page=1):
print(page)
return HttpResponse('用户列表数据的显示')

错误处理

在模板目录中创建一个404.html的页面.

1
2
3
4
5
6
<body>
<center>
<h3>404 Not Found !!! </h3>
<p>{{ exception }}</p>
</center>
</body>

也可以手动抛出并且添加提示信息,在views.py中添加:

1
2
3
4
from django.http import HttpResponse,Http404

def ecx(request):
raise Http404('纳尼a') #此括号的值将被传到404.html的exception

改变配置文件setting.py中的DEBUG=False.

在出现404的情况时,自动寻找404页面.

URL的反向解析

在app应用的urls.py文件中加入一条路径

在template目录中加入如下

1
2
#在html的模板中 使用反向解析 {% url 'user_index' %}
<a href="{% url 'user_index' %}">反向解析格式 跳转到用户列表页</a>

在app应用的views.py中加入

1
2
3
4
5
#在视图函数中使用 reverse 函数反向解析地址
from django.core.urlresolvers import reverse
# 在视图函数中反向解析 获取url的地址
res = reverse('user_index')
print(res)

反向解析遇到参数需要携带时

在html的模板中改变格式

1
2
<a href="{% url 'user_index' 10 %}">反向解析格式 带参数 跳转到用户列表页</a>
#多个参数时,只要参数用空格隔开就好.

在views视图函数中

1
2
3
4
5
def user_index(request,page=1):
res = reverse('user_index',args=(12,))
print(res)
# 响应 模板文件
return render(request,'abc/b.html')

环境

L ==> Linux

A ==> Apache Nginx

M ==> MySQL

P ==> PHP Python

模型 Model

模型是MVC中重要的一环,是数据层,负责数据的处理(增删改查)

模型提供了很多的方法可以用于操作数据,模型会在方法调用后映射要数据库中执行对应的sql语句

也会将结果转化为对象或列表返回

它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,

通过简单的配置就可以轻松更换数据库

数据库配置

1,安装mysql

2,创建库,指定字符集

3,安装pymysql

在pycharm中添加pymysql(File–>settings–>project–>Project Interpreter–>‘+’–>搜索pymysql–>install)

在linux里通过pip3 install pymysql

4,在settings.py的同级目录中找到 init.py文件,声明pymysql

1
2
3
import pymysql

pymysql.install_as_MySQLdb()

5,在settings.py文件中配置 数据库

1
2
3
4
5
6
7
8
9
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': '数据库名',
#注意,数据库必须在mysql中存在,否则报错,如下#pymysql.err.InternalError: (1049, "Unknown database 'database'")
'USER':'用户名'
'PASSWORD':'数据库密码'
'HOST':'localhost',
'PORT':'3306'
}

6,在settings.py文件中添加当前的应用

1
2
3
4
5
6
7
8
9
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'home', #是自己定义的app应用名
]

定义模型

1,找到 应用中的 models.py文件

1
2
3
4
5
6
7
8
9
from django.db import models

# Create your models here.
# 自定义模型 应用名_类名 home_users 在数据库里生成表
class Users(models.Model):
# 属性
username = models.CharField(max_length=50)
email = models.CharField(max_length=100)
age = models.IntegerField()

2,生成迁移文件

1
2
3
在本项目的终端中输入:
python manage.py makemigrations
如果是在linux里则把python改成python3

pycharm终端报错1:

解决:点击上述蓝色下划线的"…mysql\base.py",然后注释掉以下35、36行.

pycharm终端报错2:

解决:点击上述蓝色下划线的"…mysql\operations.py"",然后注释掉以下145、146行.

3,执行迁移

1
2
3
在本项目的终端中输入:
python manage.py migrate
如果是在linux里则把python改成python3

pycharm终端报错3:

解决:升级mysql或降级pip.

在视图函数中使用模型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#1,先在视图函数中导入 models
from . import models
#2,调用对应的模型进行数据的操作
# 模型的操作 演示
def mod_demo(request):
# 使用模型进行数据的查询操作
res = models.Users.objects.all()
print(res)
# 查询集 [objects,objects]
# <QuerySet [<Users: Users object>]>
# zhangsan
for x in res:
print(x.username)
return HttpResponse('模型的操作 演示')
1
2
在app应用的urls里加入:
re_path(r'^mod/demo/$', views.mod_demo,name="mod_demo"),