天天看點

第09章節-Python3.5-Django對應的路由名稱$ 效果圖:實作原理:@進一步:! 效果圖:

  • $ 效果圖:

image.png

實作原理:

  • urls.py:
from django.conf.urls import url
from django.contrib import admin
from app01 import views

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    # url(r'^index/', views.index),
    url(r'^asdfasdfasdf/(\d+)/(\d+)/', views.index, name='indexx'),
    url(r'^login/', views.login),
    # url(r'^home/', views.home),
    # views.Home.as_view()是固定用法
    url(r'^home/', views.Home.as_view()),
    # url(r'^detail/', views.detail),
    url(r'^detail-(\d+).html', views.detail),
    # url(r'^detail-(\d+)-(\d+).html', views.detail),
    # url(r'^detail-(?P<nid>\d+)-(?P<uid>\d+).html', views.detail),
]

           
  • 修改views.py:
from django.shortcuts import render,HttpResponse,redirect

# Create your views here.

# USER_DICT = {
#     'k1': 'root1',
#     'k2': 'root2',
#     'k3': 'root3',
#     'k4': 'root4',
# }

USER_DICT = {
    '1': {'name': 'root1', 'email': '[email protected]'},
    '2': {'name': 'root2', 'email': '[email protected]'},
    '3': {'name': 'root3', 'email': '[email protected]'},
    '4': {'name': 'root4', 'email': '[email protected]'},
    '5': {'name': 'root5', 'email': '[email protected]'},
}


def index(request,nid,unid):
    # indexx
    print(request.path_info)
    # /asdfasdfasdf/13/
    # reverse 能反轉
    from django.urls import reverse
    v = reverse('indexx', args=(90,88,))

    print(v)

    return render(request, 'index.html', {'user_dict': USER_DICT})


# def detail(request):
#     nid = request.GET.get('nid')
#     detail_info = USER_DICT[nid]
#     return render(request, 'detail.html', {'detail_info': detail_info})


def detail(request, nid):
    # print(nid, uid)
    # return HttpResponse(nid)
    detail_info = USER_DICT[nid]
    return render(request, 'detail.html', {'detail_info': detail_info})


'''
def login(request):
    # 判斷使用者擷取資料方式是GET,就傳回什麼資料
    if request.method == "GET":
        return render(request, 'login.html')
    # 判斷使用者擷取資料方式是POST,就判斷使用者送出的資料是否正确
    elif request.method == "POST":
        u = request.POST.get('user')
        p = request.POST.get('pwd')
        if u == 'alex' and p == '123':
            return redirect('/index/')
        else:
            return render(request, 'login.html')
    else:
        # PUT,DELETE,HEAD,OPTION...
        return redirect("/index/")

'''


def login(request):
    # 判斷使用者擷取資料方式是GET,就傳回什麼資料
    if request.method == "GET":
        return render(request, 'login.html')
    # 判斷使用者擷取資料方式是POST,就判斷使用者送出的資料是否正确
    elif request.method == "POST":
        # radio
        # v = request.POST.get('gender')
        # print(v)
        # v = request.POST.getlist('favor')
        # print(v)
        v = request.POST.get('fff')
        print(v)
        # 所有上傳檔案都上傳到request.FILES
        obj = request.FILES.get('fff')
        print(obj, type(obj), obj.name)

        # 把所上傳的檔案放到所建立的檔案夾
        import os
        file_path = os.path.join('upload',obj.name)
        # 把上傳檔案讀取一點一點拿到
        f = open(file_path, mode="wb")
        for i in obj.chunks():
            f.write(i)
        f.close()

        return render(request, 'login.html')
    else:
        # PUT,DELETE,HEAD,OPTION...
        return redirect("/index/")


# def home(request):
#     return HttpResponse('Home')


from django.views import View


class Home(View):

    # 調用父類中的dispatch(相當于助理,)
    def dispatch(self, request, *args, **kwargs):
        print('before')
        result = super(Home,self).dispatch(request, *args, **kwargs)
        print('after')
        return result

    def get(self,request):
        print(request.method)
        return render(request, 'home.html')

    def post(self,request):
        print(request.method, 'POST')
        return render(request, 'home.html')

           
  • 修改index.html:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form action="{{ request.path_info }}" method="post">
        <p><input type="text" name="user" placeholder="使用者名"></p>
        <p><input type="text" name="email" placeholder="郵箱"></p>
        <input type="submit" value="送出">
    </form>

    <ul>
        {% for k,row in user_dict.items %}
        <!--target="_blank"表示在新頁面打開-->
        <li><a target="_blank" href="/detail-{{ k }}.html">{{ row.name }}</a></li>
        {% endfor %}
    </ul>

</body>
</html>
           
  • @進一步:

  • index.html:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form action="{% url 'indexx' nid=1 uid=3 %}" method="post">
        <p><input type="text" name="user" placeholder="使用者名"></p>
        <p><input type="text" name="email" placeholder="郵箱"></p>
        <input type="submit" value="送出">
    </form>

    <ul>
        {% for k,row in user_dict.items %}
        <!--target="_blank"表示在新頁面打開-->
        <li><a target="_blank" href="/detail-{{ k }}.html">{{ row.name }}</a></li>
        {% endfor %}
    </ul>

</body>
</html>
           
  • views.py:
from django.shortcuts import render,HttpResponse,redirect

# Create your views here.

# USER_DICT = {
#     'k1': 'root1',
#     'k2': 'root2',
#     'k3': 'root3',
#     'k4': 'root4',
# }

USER_DICT = {
    '1': {'name': 'root1', 'email': '[email protected]'},
    '2': {'name': 'root2', 'email': '[email protected]'},
    '3': {'name': 'root3', 'email': '[email protected]'},
    '4': {'name': 'root4', 'email': '[email protected]'},
    '5': {'name': 'root5', 'email': '[email protected]'},
}


def index(request,nid,uid):
    # indexx
    print(request.path_info)
    # /asdfasdfasdf/13/
    # reverse 能反轉
    from django.urls import reverse
    # v = reverse('indexx', args=(90,88,))
    v = reverse('indexx', kwargs={'nid':'1','uid':'99'})
    print(v)

    return render(request, 'index.html', {'user_dict': USER_DICT})


# def detail(request):
#     nid = request.GET.get('nid')
#     detail_info = USER_DICT[nid]
#     return render(request, 'detail.html', {'detail_info': detail_info})


def detail(request, nid):
    # print(nid, uid)
    # return HttpResponse(nid)
    detail_info = USER_DICT[nid]
    return render(request, 'detail.html', {'detail_info': detail_info})


'''
def login(request):
    # 判斷使用者擷取資料方式是GET,就傳回什麼資料
    if request.method == "GET":
        return render(request, 'login.html')
    # 判斷使用者擷取資料方式是POST,就判斷使用者送出的資料是否正确
    elif request.method == "POST":
        u = request.POST.get('user')
        p = request.POST.get('pwd')
        if u == 'alex' and p == '123':
            return redirect('/index/')
        else:
            return render(request, 'login.html')
    else:
        # PUT,DELETE,HEAD,OPTION...
        return redirect("/index/")

'''


def login(request):
    # 判斷使用者擷取資料方式是GET,就傳回什麼資料
    if request.method == "GET":
        return render(request, 'login.html')
    # 判斷使用者擷取資料方式是POST,就判斷使用者送出的資料是否正确
    elif request.method == "POST":
        # radio
        # v = request.POST.get('gender')
        # print(v)
        # v = request.POST.getlist('favor')
        # print(v)
        v = request.POST.get('fff')
        print(v)
        # 所有上傳檔案都上傳到request.FILES
        obj = request.FILES.get('fff')
        print(obj, type(obj), obj.name)

        # 把所上傳的檔案放到所建立的檔案夾
        import os
        file_path = os.path.join('upload',obj.name)
        # 把上傳檔案讀取一點一點拿到
        f = open(file_path, mode="wb")
        for i in obj.chunks():
            f.write(i)
        f.close()

        return render(request, 'login.html')
    else:
        # PUT,DELETE,HEAD,OPTION...
        return redirect("/index/")


# def home(request):
#     return HttpResponse('Home')


from django.views import View


class Home(View):

    # 調用父類中的dispatch(相當于助理,)
    def dispatch(self, request, *args, **kwargs):
        print('before')
        result = super(Home,self).dispatch(request, *args, **kwargs)
        print('after')
        return result

    def get(self,request):
        print(request.method)
        return render(request, 'home.html')

    def post(self,request):
        print(request.method, 'POST')
        return render(request, 'home.html')

           
  • urls.py
from django.conf.urls import url
from django.contrib import admin
from app01 import views

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    # url(r'^index/', views.index),
    url(r'^asdfasdfasdf/(?P<nid>\d+)/(?P<uid>\d+)/', views.index, name='indexx'),
    url(r'^login/', views.login),
    # url(r'^home/', views.home),
    # views.Home.as_view()是固定用法
    url(r'^home/', views.Home.as_view()),
    # url(r'^detail/', views.detail),
    url(r'^detail-(\d+).html', views.detail),
    # url(r'^detail-(\d+)-(\d+).html', views.detail),
    # url(r'^detail-(?P<nid>\d+)-(?P<uid>\d+).html', views.detail),
]

           
  • ! 效果圖:

繼續閱讀