1月25日学习内容整理:URL的反向解析和名称空间知识补充,Django项目连接mysql

一、URL反向解析补充

1、url方法的name参数,也就是别名

from django.conf.urls import url

from . import views

urlpatterns = [
    #...
    url(r'^articles/([0-9]{4})/$', views.year_archive, name='news-year-archive'),
    #...
]

(1)在模版文件中:{%   url    "name参数值"  %}

<a href="{% url 'news-year-archive' 2012 %}">2012 Archive</a>

<ul>
{% for yearvar in year_list %}
<li><a href="{% url 'news-year-archive' yearvar %}">{{ yearvar }} Archive</a></li>
{% endfor %}
</ul>

(2)在视图函数中:

reverse("name参数值")就代表对应的URL地址,args代表URL中的参数,比如说URL中带有有名或无名分组,传递到后端的参数就用args表示

from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect

def redirect_to_year(request):
    # ...
    year = 2006
    # ...
    return HttpResponseRedirect(reverse('news-year-archive', args=(year,)))

 

 

2、名称空间

django在反向解析URL的时候会默认从全局urls文件找,然后在依次找app中的,若某两个name参数重复了那就会出问题,所以我们就要指定反向查找的范围

这就引入名称空间namespace

(1)应用:

全局urls文件中

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^app01/', include("app01.urls",namespace="app01")),
    url(r'^app02/', include("app02.urls",namespace="app02")),
]

app01文件中的urls文件

urlpatterns = [
    url(r'^index/', index,name="index"),
]

app02文件中的urls文件

urlpatterns = [
    url(r'^index/', index,name="index"),
]

如上,app01和app02的name参数重复了,这样的话会出问题,所以我们在全局urls文件中指定好namespace参数,这个参数值没有特定的指代意义,随便取

在app01和app02的视图中

reverse("namespace参数值:name参数值")  这里的参数值一定要和设置值一一对应,所以namespace值没有特定的意义,只要在这里保持一致就可以 

from django.core.urlresolvers import reverse

def index(request):

    return  HttpResponse(reverse("app01:index"))
from django.core.urlresolvers import reverse

def index(request):

    return  HttpResponse(reverse("app02:index"))

 

 

 

二、django项目连接mysql,不再用默认的db.sqlite3

(1)settings.py中设置

一定要注意:数据库一定要先创建好,HOST就是ip地址

DATABASES = {
                'default': {

                    'ENGINE': 'django.db.backends.mysql',

                    'NAME': 'day107',    #你的数据库名称

                    'USER': 'root',   #你的数据库用户名

                    'PASSWORD': '', #你的数据库密码

                    'HOST': '', #你的数据库主机,留空默认为localhost

                    'PORT': '3306', #你的数据库端口
                }
            }

 

(2)此时做数据库迁移时会报错,因为默认采用的是MySQLdb,py3已经就采用pymysql模块了,所以需要做一下替换

在app或者项目全局的初始化__init__文件中加入:

import pymysql
pymysql.install_as_MySQLdb()

 

posted @ 2018-01-25 16:46  九二零  阅读(105)  评论(0编辑  收藏  举报