Python Web之Django-urls

1.将statics文件放在应用文件夹下:

STATICFILES_DIRS=(
    # os.path.join(BASE_DIR, 'blog/statics'),
    os.path.join(BASE_DIR, 'blog','statics'),
)

2.无命名分组

urls.py
from django.contrib import admin
from django.conf.urls import url
from blog import views
'''
   r 开头的python字符串是 raw 字符串,所以里面的所有字符都不会被转义,
   比如r'\n'这个字符串就是一个反斜杆加上一字母n,而'\n'我们知道这是个换行符。
   因此,上面的'\\\\'你也可以写成r'\\',这样,应该就好理解很多了。可以看下面这段:
  '''
urlpatterns = [
    url(r'admin/',admin.site.urls),
    # r代表raw string,()代表分组,\d代表数字,{4}代表重复4次,后面同理。例如article/2018/02 通过分组(),将相应的2018传给相应视图函数的参数year,02传给相应试图的month。
    url(r'article/(\d{4})/(\d{2})',views.article_year),
]

views.py
def article_year(request,y,m):
    return HttpResponse("year:%s month:%s"%(y,m))

3.有命名分组

urls.py
from django.contrib import admin
from django.conf.urls import url
from blog import views
urlpatterns = [
    url(r'admin/',admin.site.urls),
    url(r'show_time/',views.show_time),
    # 无命名分组
    # 访问 http://127.0.0.1:8088/article/2018/02 year:2018  我是想进入2018/02,最后页面返回year:2018 month:02,可却返回了year:2018
    # 原因:article/2018/02前面的article/2018全部匹配上了,就直接进入了article_year视图,不会进入下面的article_year_month。此时正则匹配出加一个$,表示结尾,此时就不会出现上述情况了。
    # url(r'article/(\d{4})',views.article_year),
    url(r'article/(\d{4})$',views.article_year),
    # 有命名分组
    # ?P没有正则意义,只是代表要起一个命名分组
    url(r'article/(?P<year>\d{4})/(?P<month>\d{2})', views.article_year_month),
]

views.py
# 无命名分组 y可随意
def article_year(request,y):
    return HttpResponse("year:%s"%(y))

# 有命名分组 year month 是定死的,根据前面urls中来定
def article_year_month(request,year,month):
    return HttpResponse("year:%s month:%s"%(year,month))

4.别名及注册,get/post如何获取信息

别名使用:
1.urls.py中添加别名name='reg'
2.修改form表单的action属性值action="{% url 'reg' %}

urls.py
url(r'register',views.register,name='reg'),

views.py
def register(request):
    if request.method=='POST':
        print(request.POST.get('user'))
        return HttpResponse('success!')
    return render(request,'register.html')

register.html
<h1>学生注册</h1>
<hr/>
<form action="{% url 'reg' %}" method="post">
    <p>姓名<input type="text" name="user"/></p>
    <p>年龄<input type="text" name="age"/></p>
    <p>爱好
        <input type="checkbox" name="hobby" value="1"/>篮球
        <input type="checkbox" name="hobby" value="2"/>足球
        <input type="checkbox" name="hobby" value="3"/>乒乓球
    </p>
    <p><input type="submit"></p>
</form>

5.路由分发

1.在blog应用里面新建一个urls.py

------urls.py-------
from django.contrib import admin
from django.conf.urls import url,include
from blog import views

urlpatterns=[
    # 无命名分组
    # 访问 http://127.0.0.1:8088/article/2018/02 year:2018  我是想进入2018/02,最后页面返回year:2018 month:02,可却返回了year:2018
    # 原因:article/2018/02前面的article/2018全部匹配上了,就直接进入了article_year视图,不会进入下面的article_year_month。此时正则匹配出加一个$,表示结尾,此时就不会出现上述情况了。
    # url(r'article/(\d{4})',views.article_year),
    url(r'article/(\d{4})$', views.article_year),
    # 有命名分组
    # ?P没有正则意义,只是代表要起一个命名分组
    url(r'article/(?P<year>\d{4})/(?P<month>\d{2})', views.article_year_month),
    url(r'register', views.register, name='reg'),
]
2.在全局urls.py里面写入url(r'blog/',include('blog.urls'))
------全局urls.py-------
from django.contrib import admin
from django.conf.urls import url,include
from blog import views
urlpatterns = [
    url(r'admin/',admin.site.urls),
    url(r'show_time/',views.show_time),
    # 路由分发
    url(r'blog/',include('blog.urls')),
]

3.必须加上blog才可访问到,访问:http://127.0.0.1:8088/blog/register