django(二)
一、路由系统
1.简单的配置
├─app01
│ └─urls.py #子目录路由
│ └─views.py # 处理用户请求
│
├─s13day18django
│ ├─setting.py
│ └─urls.py #路由
└─template
├─index.html
└─detail.html # 处理用户请求
url.py
from app01 import views urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^index/', views.f1), url(r'^login/', views.login), ]
views.py
from django.shortcuts import render from django.shortcuts import HttpResponse def f1(request): return HttpResponse('OK') def login(request): return HttpResponse('OK')
显示效果:
2.url 数字传参
url.py
from app01 import views urlpatterns = [ url(r'^detail/(\d+)/', views.detail), url(r'^detail2/(\d+)/(\d+)/', views.detail2), url(r'^detail3/(?P<p1>\d+)/(?P<x2>\d+)/', views.detail3), ]
views.py
def detail(request, nid): print(nid) return HttpResponse('OK') # detail2(1,2) def detail2(request, xid, nnid): print(xid,nnid) return HttpResponse('OK') # detail3(x2=234,p1=123) def detail3(request, p1, x2): print(p1,x2) return HttpResponse('OK')
显示效果:
1)
2)
3)
3.url数字传参,分页运用
─s13day18django
└─urls.py
from app01 import views from django.conf.urls import url, include #include子目录 urlpatterns = [ url(r'^index/(\d+)/', views.index), url(r'^web/', include('app01.urls')), ]
views.py
from django.shortcuts import render USER_LIST = [] for item in range(94): temp = {"id": item, 'username':'alex'+str(item), 'email': 'email' + str(item)} USER_LIST.append(temp) def index(request, page): print(page) # 1,0-9 # 2,10-19 # 3,20-29 page = int(page) start = (page - 1) * 10 end = page * 10 user_list = USER_LIST[start:end] # return HttpResponse('OK') return render(request, 'index.html', {'user_list': user_list}) def detail(request, nid): nid = int(nid) current_detail_dict = USER_LIST[nid] # current_detail_dict return render(request, 'detail.html', {'current_detail_dict': current_detail_dict})
─app01 #子目录
└─urls.py
from app01 import views urlpatterns = [ url(r'^detail/(\d+)/', views.detail), ]
index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> </head> <body> <table> <tr> <td>ID</td> <td>用户名</td> <td>详细</td> </tr> {% for item in user_list %} <tr> <td>{{ item.id }}</td> <td>{{ item.username }}</td> <td><a href="/web/detail/{{ item.id }}/">查看详细</a></td> </tr> {% endfor %} </table> </body> </html>
detail.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> </head> <body> <ul> <li> {{ current_detail_dict.id }} </li> <li> {{ current_detail_dict.username }} </li> <li> {{ current_detail_dict.email }} </li> </ul> </body> </html>
setting.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app01', #添加
]
4.各种数据类型,页面显示 以及自定义属性
├─app01
│ ├─urls.py #子目录路由
│ ├─views.py # 处理用户请求
│ └─templatetags
│ └─ xx.py
├─s13day18django
│ └─urls.py #路由
└─template
└─detail.html # 处理用户请求
─s13day18django
└─urls.py
from app01 import views from django.conf.urls import url, include #include子目录 urlpatterns = [ url(r'^web/', include('app01.urls')), ]
├─app01
└─urls.py
from django.conf.urls import url from app01 import views urlpatterns = [ url(r'^template', views.template), ]
views.py
def template(request): return render(request, 'template.html', {'k1':'VVVV','k2':[11,22,33],'k3': {'nid':12,'name': 'alex'}})
xx.py
@register.filter def f1(value, arg): return value + "666" + arg @register.simple_tag def f2(s1,s2,s3, s4): return s1 + s2 + s3 + s4 @register.filter def f3(value): if value == 'VVV': return True return False
template.html
{% load xx %} <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> </head> <body> {{ k1 }} {{ k2.1 }} {{ k3.name }} {% for item in k2 %} <p>{{ item }},{{ forloop.counter }},{{ forloop.counter0 }},{{ forloop.first }},{{ forloop.last }},{{ forloop.revcounter }}</p> {% endfor %} {% if k1 == 'v1' %} <h1>V1</h1> {% elif k1 == 'v2' %} <h1>V2</h1> {% else %} <h1>7777</h1> {% endif %} {{ k1 }} {{ k1|lower }} #内置方法 {{ k1|f1:"alex,123" }} #自定义方法一 对应 xx.py @register.filter {% f2 1 2 3 4 %} #自定义方法二 对应xx.py @register.simple_tag 不能用于if判断 {% if k1|f3 %} <h1>True</h1> {% else %} <h1>False</h1> {% endif %} </body> </html>
显示效果:
5.模板-
├─app01
│ ├─urls.py #子目录路由
│ └─views.py # 处理用户请求
├─s13day18django
│ └─urls.py #路由
└─template
├─assets.html
├─userinfo.html
├─layout.html # 处理用户请求
└─son.html
─s13day18django
└─urls.py
from app01 import views
from django.conf.urls import url, include #include子目录
urlpatterns = [
url(r'^web/', include('app01.urls')),
]
├─app01
└─urls.py
from django.conf.urls import url from app01 import views urlpatterns = [ url(r'^assets', views.assets), url(r'^userinfo', views.userinfo), ]
views.py
def assets(request): assets_list = [] for i in range(10): temp = {'hostname': 'h1'+str(i), 'port': 80} assets_list.append(temp) return render(request, 'assets.html', {'assets_list': assets_list}) def userinfo(request): user_list = [] for i in range(10): temp = {'username': 'h1'+str(i), 'salary': 80} user_list.append(temp) return render(request, 'userinfo.html', {"user_list": user_list})
ayout.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> <link rel="stylesheet" href="..." /> <style> .pg-header{ height: 48px; background-color: cadetblue; } .pg-body{ min-height: 500px; } .pg-body .body-menu{ width: 20%; float: left; } .pg-body .body-content{ width: 80%; float: left; } .pg-footer{ height: 100px; background-color: brown; } .active{ background-color: aquamarine; color: white; } </style> {% block css %}{% endblock %} </head> <body> <div class="pg-header"> 后台系统V1 </div> <div class="pg-body"> <div class="body-menu"> <ul> <li><a id="userinfo" href="/web/userinfo">用户管理</a></li> <li><a id="assets" href="/web/assets">资产管理</a></li> </ul> </div> <div class="body-content"> {% block body %}{% endblock %} </div> </div> <div class="pg-footer"></div> <script src="xxx"></script> {% block js %}{% endblock %} </body> </html>
assets.html
{% extends 'layout.html' %} {% block body %} <table> {% for item in assets_list %} <tr> <td>{{ item.hostname }}</td> <td>{{ item.port }}</td> </tr> {% endfor %} </table> {% include 'son.html' %} {% include 'son.html' %} {% include 'son.html' %} {% include 'son.html' %} {% include 'son.html' %} {% include 'son.html' %} <h3></h3> {% endblock %}
userinfo.html
{% extends 'layout.html' %} {% block css %} <style></style> {% endblock %} {% block body %} <ul> {% for item in user_list %} <li>{{ item.username }},{{ item.salary }}</li> {% endfor %} </ul> {% endblock %} {% block js %} <script> document.getElementById('userinfo').className = 'active'; </script> {% endblock %}
son.html
<form> <input /> <input /> <input /> <input /> </form>
显示效果
5.登陆认证
├─app01
│ ├─urls.py #子目录路由
│ └─views.py # 处理用户请求
├─s13day18django
│ └─urls.py #路由
└─template
└─ajax_demo.html
─s13day18django
└─urls.py
from app01 import views from django.conf.urls import url, include #include子目录 urlpatterns = [ url(r'^web/', include('app01.urls')), ]
├─app01
└─urls.py
from django.conf.urls import url from app01 import views urlpatterns = [ url(r'^ajax_demo', views.ajax_demo), ]
views.py
from django.shortcuts import render from django.shortcuts import HttpResponse import json def ajax_demo(request): if request.method == 'POST': ret = {'status': False, 'message': ''} user = request.POST.get('user',None) pwd = request.POST.get('pwd',None) if user == '111' and pwd == '222': ret['status'] = True return HttpResponse(json.dumps(ret)) else: ret['message'] = "用户名或密码错误" return HttpResponse(json.dumps(ret)) return render(request, 'ajax_demo.html')
ajax_demo.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> </head> <body> <div> <p>用户名:<input type="text" id="username" /></p> </div> <div> <p>用户名:<input type="password" id="pwd" /></p> </div> <input type="button" value="提交" onclick="SubmitForm();" /> <script src="/static/jquery-1.8.2.min.js"></script> <script> function SubmitForm(){ $.ajax({ url: '/web/ajax_demo/', type: 'POST', data: {'user': $('#username').val(), 'pwd': $('#pwd').val()}, dataType: 'json', success: function (data) { // data = 字符串 {status:xx,message:''} // data对象 //var data_dict = JSON.parse(data); if(data.status){ location.href = "http://www.baidu.com"; }else{ alert(data.message); } } }) } </script> </body> </html>
显示效果:登陆后跳转到百度