django 路由系统,数据库操作

一、修改配置

数据库

DATABASES = {
    'default': {
    'ENGINE': 'django.db.backends.mysql',
    'NAME':'dbname',
    'USER': 'root',
    'PASSWORD': 'xxx',
    'HOST': '',
    'PORT': '',
    }
}

# 由于Django内部连接MySQL时使用的是MySQLdb模块,而python3中还无此模块,所以需要使用pymysql来代替
  
# 如下设置放置的与project同名的配置的 __init__.py文件,或settings 中, 目的就是执行一遍pymysql.install......
  
import pymysql
pymysql.install_as_MySQLdb() 

模版及静态文件:

TEMPLATE_DIRS = [
    os.path.join(BASE_DIR, 'templates'),
]

STATICFILES_DIRS = (
    (os.path.join(BASE_DIR, 'static'),
)
二、路由系统


  • 单一路由对应:
    path('home/', views.index)

  • 内置正则路由:
    path('articles/<int: pid>/', views.article)
    article函数内:
    def article(request, *args, **kwargs):
      #kwargs 中存储了{'pid': 17}
      return render(request, 'aritcle.html')

  • 为路由映射设置名称
    path('home/', views.home, name='home'),
    path('article/ ', views.index, name='article'),
    设置名称之后,可以在不同的地方调用,如:
     
    模板中使用生成URL {% url 'home' 2017 %}
    函数中使用生成URL reverse('article', args=(2017,)) from django.urls import reverse
    Model中使用获取URL 自定义get_absolute_url() 方法

2.2 一二级路由分配

使用django.urls下的 include方法进行二级路由分配
一级路由:
project同名的urls.py文件内:

from django.urls import path
from django.urls import include

urlpatterns = [
    path('blog/', include('blog.urls')),
]

二级路由:
app下创建urls.py

from django.urls import path
from blog import views

urlpatterns = [
    path('index/', views.index),
]

name 参数与路由反解:
经常在视图函数中需要拿到前来的路由关系,除了:
request.path_info拿到全路径只为,
还能使用django.urls 下的 reverse(name)函数进行反解url
只需要在urls.py文件中的路由关系映射后面加上name参数,并给一个值,让reverse拿着这个值反解

#urls.py 内

urlpatterns = [
    path('article/', views.article, name='article'),
]

#views.py文件内

from django.urls import reverse

def article(request):
    url_article = reverse('article')
    return render(request, 'article.html', {'url': url_article})

命名空间:

#project.urls.py

from django.conf.urls import url,include
 
urlpatterns = [
    path('a/', include('blog.urls', namespace='author-polls')),
    path('b/', include('blog.urls', namespace='publisher-polls')),
]

blog.urls.py

from django.conf.urls import path
from blogimport views
 
app_name = 'blog'
urlpatterns = [
    path('article/<int:pid>/$', views.detail, name='detail')
]

以上定义带命名空间的url之后,使用name生成URL时候,应该如下:

v = reverse('author-polls:detail', kwargs={'pid':11})
{% url 'publisher-polls:detail' pid=12 %}

猜你喜欢

转载自www.cnblogs.com/shiqi17/p/9610660.html