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 makemigrationspython manage.py migrate 可以在后面加一个模型文件来特别指定,这样就只会执行对应的 SQL 语句

常见报错信息

通过报错信息的文件路径找到 ...site-packagesDjango-2.0-py3.6.eggdjangodbackendsmysql 这个路径里的 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">
原文地址:https://www.cnblogs.com/richmanwu/p/13615428.html