一、Django(1.11.9)连接MySQL
1、如果项目使用sqlite,不需要额外配置,直接操作即可。
2、Django默认情况连接MySQL用的驱动是mysqldb模块,python3.x以后用的都是pymysql。
3、使用MySQL,需要配置如下:
- 配置文件中:settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'day62',
'HOST': '127.0.0.1',
'PORT': 3306,
'USER': 'root',
'PASSWORD':'123'
}
}
- 在app文件夹中的__init__.py文件夹中写入:
import pymysql
pymysql.install_as_MySQLdb()
- 首先手动创建一个数据库,在models.py中新建类,写字段
执行python3 manage.py makemigrations
和python3 manage.py migrate
即可在已经创建的数据库中添加相应的表。
二、路由层的简单路由配置
1、路由参数
- 第一个参数是正则表达式
- 第二个参数是视图函数内存地址
- 第三个参数是一个字典,{"name":"xiaoming","age":18},给视图函数传递默认值
- 第四个参数name,是当前路由的别名,用于反向解析
注意点:
1、访问根路径,如何配置路由
url(r'^$',视图函数内存地址)
2、在路由中配置多个相同路由只会执行第一个
3、当两个路由为
url(r'^login', views.home),
url(r'^login2', views.home),
时,永远不会匹配到第二个
2、路由层的APPEND_SLASH
当url配置中正则部分最后没加上/时,Django会通过django.middleware.common.CommonMiddleware
这个中间件自动补齐,如在访问http://127.0.0.1:8000/login这个地址时,浏览器会发两次请求,重定向一次,而在settings.py中加上APPEND_SLASH=False
时,会去除这种特性。
三、无名分组和有名分组
1、无名分组,把分组分出来的值,当作位置参数传递给视图函数
url(r'^login/([0-9]{4})/([0-9{2}])',view.login),
2、有名分组,把分组出来的值,当作关键字参数传递给视图函数
url分组的作用:可以从url中解析出参数,传递给视图函数使用
四、路由分发
1、有一个总路径,根路由,总路由负责做分发
2、每个app有自己的路由和视图函数的对应关系
3、使用:
- 在根路由中配置
url(r'^app01/',include('app01.urls')),
- 在不同app中新建urls.py
urlpatterns = [
url(r'login/',views.login),
url(r'home/',views.home),
]
- http://127.0.0.1:8000/app01/login/ 先匹配app01,如果成功分发到app01的urls中继续匹配
五、反向解析和名称空间
1、反向解析
- 通过路由的别名,解析出路由的地址
- 用在视图函数中:
url = reverse('home') # home就是路由的别名
- 模版文件中使用
{% url 'bieming' %}
- 作用:动态根据别名获得路径,一旦路径改变,不需要改其他代码
2、名称空间
路由做反向解析时,有同名路由,出现问题
在做路由分发时,给每个app的路径设置一个名称空间
使用步骤
1 在总路由中设置
url(r'^app01',include('app01.urls','名称空间的名字') ),
2 用在视图函数中:
url=reverse('名称空间的名字:home') # home就是路由的别名
print(url)
3 模板文件中使用
{% url '名称空间的名字:meinv' %}