python_Django简单的登录页面
一、命题
是做一个有技术的黑盒测试,还是做一个黑盒测试,这个是一个为了带Django初学者更容易认识这个框架的小例子
1.1伪造响应信息
image.png浏览器运行结果
image.png
二、创建
根据Django的MTV 模式,我们先输入指令创建
app :python manage.py startapp cmdb
这里的app意思就是程序模块
如图我们创建的一个基础框架
image.png
获取更多的返回信息request.environ
for k,v in request.environ.items():
print(k,v)
image.png
三、编写
在templates 文件下创建 login.html,写一个表单提交
<form action="login" method="post">
<table>
<tr>
<td><label for="user">用户名</label></td>
<td><input type="text" name="user" id="user"></td>
</tr>
<tr>
<td><label for="pwd">密码</label></td>
<td><input type="password" name="pwd" id="pwd"></td>
<span style="background: red"></span>
</tr>
<tr>
<td ><input type="submit" value="提交"></td>
</tr>
</table>
</form>
我们现在J_Login文件下的urls.py,写上url的条件映射对应的处理函数
#引入逻辑处理模块
from cmdb import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
#创建映射关系
url(r'^login', views.login),
]
ulr的映射我们写好后,开始写用户提交到页面的代码逻辑处理,也就是在我们创建app模块下 views里面写。这里的app模块指的是cmdb
from django.shortcuts import HttpResponse
from django.shortcuts import redirect
#创建url对应的函数映射
def login(request):
#判断是否是POST 返回
if request.method == 'POST':
#接受 html name 是user和pwd的标签
user = request.POST.get('user',None)
pwd = request.POST.get('pwd', None)
if user =='123' and pwd=='123' :
#重定向百度
return redirect('https://www.baidu.com')
#去读index,通过HTTpResponse 方法返回文件内容
with open('templates/index.html', 'rb' ) as f:
data =f.read()
f.close()
return HttpResponse(data)
上面的这种方式只是为了让我们更加理解,工作原理,通过文件的读取,在页面展示对应的读取html,但实际生产生活中我们会用到下面这种,而不是用io来读取展示 request.POST.get可以理解,去html找name名的标签属性{‘name’:‘user’}
下面是实际生产生活的写法:
我们先在我们的提交表单的html加上一句话用{{}} 双大括号 上
<span style="background: red">{{ msg }}</span>
改动我们的view
from django.shortcuts import render
from django.shortcuts import redirect
#创建url对应的函数映射
def login(request):
msg = ''
#判断是否是POST 返回
if request.method == 'POST':
#接受 html name 是user和pwd的标签
user = request.POST.get('user',None)
pwd = request.POST.get('pwd', None)
if user =='123' and pwd=='123' :
#重定向百度
return redirect('https://www.baidu.com')
else:
msg = '用户名密码错'
return render(request, 'index.html',{'msg':msg})
#去读index.html
return render(request,'index.html',{'msg':msg})
之前我们用HttpResponse,通过文件的读写返回,这把我们用render方法直接返回对应页面,而且render方法中,可用字典的方式向页面返回我们提前用双大括号在页面做好的标记位置返回值,但这个前提是我们在settings.py 的设置文件做了设置
image.png
四、提升
光写一个没有数据库的登录没意思,我们在写一个页面,可以进行不通过数据库的假数据用户添加
我们在templates 文件夹下创建一个home.html
<form action="home" method="post">
<input type="text" name='user' placeholder="用户名">
<input type="text" name="pwd" placeholder="密码">
<input type="submit">
</form>
{% for infos in user_info %}
<table>
<tr>
<td>用户名</td>
<td>{{ infos.u}}</td>
</tr>
<tr>
<td>密码</td>
<td>{{infos.p}}</td>
</tr>
</table>
{% endfor %}
在urls做关系映射
rom cmdb import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
#创建映射关系
url(r'^login', views.login),
url(r'^home', views.home),
]
编写home方法的代码
USER_LIST =[{'user':'w','pwd':'123'}]
def home(request):
if request.method == 'POST':
u = request.POST.get('user',None)
p = request.POST.get('pwd',None)
temp = {'user':u, 'pwd':p}
USER_LIST.append(temp)
#返回字典在页面展示
return render(request,'home.html',{'user_List':USER_LIST})
(二)、字典传值
view 层
USER_DICT={
'k1':'v1',
'k2':'v2',
}
def test(request):
return render(request,'test.html',{'user_dict':USER_DICT})
templates 模块
<ul>
<!-字典.k 打印出来的是value->
{{ user_dict.k1 }}
<!-字典.value 字典.key 字典.items->
{% for k,v in user_dict.items %}
<li>
{{ k }}-{{v}}
</li>
{% endfor %}
</ul>
字典的循环方法 跟python 一样有value , key, items