Django 学习(二)
要使用 MySQL,需要安装驱动,pip install mysql
settings.py
配置数据库
DATABASES = {
'default':
{
'ENGINE': 'django.db.backends.mysql', # 数据库引擎
'NAME': 'runoob', # 数据库名称
'HOST': '127.0.0.1', # 数据库地址,本机 ip 地址 127.0.0.1
'PORT': 3306, # 端口
'USER': 'root', # 数据库用户名
'PASSWORD': '123456', # 数据库密码
}
}
Python 2.x 版本不支持中文,需要在
.py
文件头部添加一行# -*- coding: UTF-8 -*-
告诉 Django 使用 pymysql 模块连接 MySQL 数据库:
# 在与 settings.py 同级目录下的 __init__.py 中引入模块和进行配置
import pymysql
pymysql.install_as_MySQLdb()
python manage.pu makemigrations
和 python manage.py migrate
可以在后面加一个模型文件来特别指定,这样就只会执行对应的 SQL 语句
常见报错信息
通过报错信息的文件路径找到 ...site-packages\Django-2.0-py3.6.egg\django\db\backends\mysql 这个路径里的 base.py 文件,把这两行代码注释掉(代码在文件开头部分):
# if version < (1, 3, 13):
# raise ImproperlyConfigured('mysqlclient 1.3.13 or newer is required; you have %s.' % Database.__version__)
ORM 操作
获取数据
Test.objects.order_by('id') # 获取全部并排序
Request 对象
每个视图函数的第一个参数是一个 HttpRequest 对象
属性:path,user,method,GET,POST
user
是一个django.contrib.auth.models.User 对象,代表当前登录的用户。如果访问用户当前没有登录,user将被初始化为django.contrib.auth.models.AnonymousUser的实例。你可以通过user的is_authenticated()方法来辨别用户是否登录。
GET
是包含所有HTTP GET参数的类字典对象,QueryDict
POST
包含所有HTTP POST参数的类字典对象,QueryDict,服务器收到空的POST请求的情况也是有可能发生的。也就是说,表单form通过HTTP POST方法提交请求,但是表单中可以没有数据。因此,不能使用语句if request.POST来判断是否使用HTTP POST方法;应该使用if request.method == "POST" (参见本表的method属性)。
request 的方法
QueryDict 的方法
HttpResponse 对象
响应对象主要有三种形式:HttpResponse()
、render()
、redirect()
。
HttpResponse()
: 返回文本,参数为字符串,字符串中写文本内容。如果参数为字符串里含有 html
标签,也可以渲染。
render()
: 返回文本,第一个参数为 request
,第二个参数为字符串(页面名称,位于templates/app/目录下),第三个参数为字典(可选参数,向页面传递的参数:键为页面参数名,值为 views
参数名)。
redirect()
:重定向,跳转新页面。参数为字符串,字符串中填写页面路径。一般用于 form 表单提交后,跳转到新页面
反向解析
随着功能的增加,路由层的 url 发生变化,就需要去更改对应的视图层和模板层的 url,非常麻烦,不便维护。
这时我们可以利用反向解析,当路由层 url 发生改变,在视图层和模板层动态反向解析出更改后的 url,免去修改的操作。
反向解析一般用在模板中的超链接及视图中的重定向。
普通路径
在 urls.py 中给路由起别名,name="路由别名"。
在 views.py 中,从 django.urls 中引入 reverse,利用 reverse("路由别名") 反向解析:
在模板 templates 中的 HTML 文件中,利用 {% url "路由别名" %} 反向解析。
正则路径(无名分组)
在 views.py 中,从 django.urls 中引入 reverse,利用 reverse("路由别名",args=(符合正则匹配的参数,)) 反向解析。args=(,)
是个元组
在模板 templates 中的 HTML 文件中利用 {% url "路由别名" 符合正则匹配的参数 %} 反向解析。
正则路径(有名分组)
在 views.py 中,从 django.urls 中引入 reverse,利用 reverse("路由别名",kwargs={"分组名":符合正则匹配的参数}) 反向解析。kwargs={:}
是个字典
在模板 templates 中的 HTML 文件中,利用 {% url "路由别名" 分组名=符合正则匹配的参数 %} 反向解析。
命名空间
定义命名空间(include 里面是一个元组)格式如下:
include(("app名称:urls","app名称"))
在 views.py 中使用名称空间,语法格式如下:
return redirect(reverse("app01:login")
在 templates 模板的 HTML 文件中使用名称空间,语法格式如下:
<form action="{% url 'app01:login' %}" method="post">