您的位置:首页 > 编程语言 > Python开发

Python菜鸟成长记——简单实现用户登录和增删改查以及文件上传和下载

2016-10-10 15:59 597 查看
这一篇,将会展示用Python语言实现用户信息的增删改查

首先,先搭建项目框架,这个在上一节里有提到,就不再写

然后 ,搭好项目,就开始编码了,首先,先分析,我们要实现用户信息的管理,就先写好界面,根据界面来写数据库,这里只是实现最简单的用户信息管理,一般有用户名,密码,头像。实现增删改,就是需要三个botton。页面代码展示

登录页面代码`

后台登录

u{

font:14px center;
line-height:50px;


}

.in{

height:30px;

}

log{

margin-top:20px;
width:90px;
height:30px;
font-size:14px;


{% csrf_token %}

用户名:

密 码:

</form>
</center>


这是用户信息列表页面


用户信息

u{

font:14px center;
line-height:50px;


}

.in{

height:30px;

}

.ad{

margin-top:15px;

width:40px;
height:35px;
background-color:#ccc;


{% for res in us%}

ID头 像用户名密 码操 作
{{res.id}}
</td>
<td>{{res.username}}</td>
<td>{{res.password}}</td>
<td><a href=/del/{{res.id}}/>
<input type="button" value="删除">
</a>
<a href=/modify/{{res.id}}>
<input type="button" value="修改">
</a>
<a href=/img/?id={{res.id}}>
<input type="button" value="传图">
</a>
<a href='https://oscdn.geek-share.com/Uploads/Images/Content/201610/10/ca4cc6453605abdc5a508410ea19743e'>下载</a>

</td>
</tr>
{%endfor%}
</table>

<a href="/add/">
<input type="button" class="ad" name="add" value="添加"/>
</a>
<a href="/output">
<input type="button" class="ad" name="output" value="导出"/>
</a>

</center>


`这是添加用户信息页面

<!doctype html>
<html>
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
<meta charset="utf-8">
<title>添加用户</title>

<style type="text/css">
*{
margin:0;
padding:0;
}
#u{
font:14px center; line-height:50px;}
.in{
height:30px;
}
#log{
margin-top:20px; width:90px; height:30px; font-size:14px;</style>
</head>

<body>
<center>
<form action="/addinform/" method="post">
{% csrf_token %}<!--模板标签-->
<span id="u">用户名:</span>
<input class="in" type="text" name="username"/><br/>
<span id="p">密 码:</span>
<input class="in" type="text" name="password"/><br/>
<input type="submit" value="保 存" id="sa"/>

</form> </center></body>
</html>


这是修改页面

<!doctype html>
<html>
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
<meta charset="utf-8">
<title>添加用户</title>

<style type="text/css">
*{
margin:0;
padding:0;
}
#u{
font:14px center; line-height:50px;}
.in{
height:30px;
}
#log{
margin-top:20px; width:90px; height:30px; font-size:14px;</style>
</head>

<body>
<center>
<form action="/domodify/{{us.id}}/" method="post">
{% csrf_token %}<!--模板标签-->
<span id="u">用户名:</span>
<input class="in" type="text" name="username" value="{{us.username}}" /><br/>
<span id="p">密 码:</span>
<input class="in" type="text" name="password" value="{{us.password}}"/><br/>
<input type="submit" value="修 改" id="do"/>

</form> </center></body>
</html>


文件,图片上传界面

<!doctype html>
<html>
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
<meta charset="utf-8">
<title>上传</title>

<style type="text/css">
*{
margin:0;
padding:0;
}
#u{
font:14px center; line-height:50px;}
.in{
height:30px;
}
#log{
margin-top:20px; width:90px; height:30px; font-size:14px;</style>
</head>

<body>
<center>
<form enctype="multipart/form-data" action="/upload/?id={{us}}/" method="post">
{% csrf_token %}<!--模板标签-->
<input type = "hidden" name = "id" value = "{{us}}"/>
<input class="in" type="file" name="file" value="{{uf.img}}"/><br />

<input type="submit" value="上 传" id="log"/>

</form> </center></body>
</html>


以上是界面,下面我们在models.py里建表

from __future__ import unicode_literals
from django.db import models

# Create your models here.
class User(models.Model):
username = models.CharField(max_length = 50)
password = models.CharField(max_length = 50)
img = models.CharField(max_length = 100)


这里文件上传,有些地方直接用filefield也是可以的

如果上传图片,也可直接写,但是需要安装pillow插件才能不报错,如:

img = models.ImageField(upload_to = './upload/',null=True)


写完数据库,在cmd里执行初始化,便生成了数据库,可以安装mysql的视图软件,直接可以看到数据表

下一步,在views.py里实现功能

#encoding:utf-8
from django.shortcuts import render
from django.shortcuts import render_to_response
from django.http import HttpResponse,HttpResponseRedirect
from models import User
from django.http import StreamingHttpResponse
from django import forms
import StringIO
import re
import os
import xlwt
#encoding:utf-8
# Create your views here.
# coding=<encoding name>
class userForm(forms.Form):
username = forms.CharField()
password = forms.CharField()
img = forms.FileField(required=False)

def Login(request):
return render(request,'login.html')
def dologin(request):
if request.method == 'POST':
uf = userForm(request.POST)
if uf.is_valid():
username = uf.cleaned_data['username']
password = uf.cleaned_data['password']
user = User.objects.filter(username__exact = username,
password__exact = password )
if user:
users = User.objects.all()
con = {'us':users}
return render(request,'inform.html',con)
else:
return HttpResponseRedirect('/login/')
else:
return render_to_response('login.html')
def add(request):
return render(request,'add.html')
def addinform(request):
if request.method == 'POST':
uf = userForm(request.POST)
if uf.is_valid():
username = uf.cleaned_data['username']
password = uf.cleaned_data['password']
user = User(username=username,password=password)
user.save()
users = User.objects.all()
con = {'us':users}
return render(request,'inform.html',con)
else:
return render(request,'add.html')
def deletett(request,p):
User.objects.get(id=p).delete()
users = User.objects.all()
con = {'us':users}
return render(request,'inform.html',con)
def modify(request,p):
u = User.objects.get(id=p)
con = {'us':u}
return render(request,'modify.html',con)
def domodify(request,p):
if request.method == 'POST':
uf = userForm(request.POST)
if uf.is_valid():
username = uf.cleaned_data['username']
password = uf.cleaned_data['password']
u = User.objects.get(id=p)
u.username = username
u.password = password
u.save()
users = User.objects.all()
con = {'us':users}
return render(request,'inform.html',con)
def img(request):
u = request.GET.get('id')
return render(request,'img.html',{"us":u})
#上传
def upload(request):
if request.method == 'POST':
uf = userForm(request.POST, request.FILES)
print "aaaaaaaaaaaaaa"
#if uf.is_valid():
ids = request.POST["id"]
print 'eeeeeeee',ids
img = request.FILES.get('file')
file_name = str(img.name)
print type(file_name)
handle_upload_file(request.FILES['file'])
u = User.objects.get(id = ids)
u.img = file_name
print "aaaaaasssfdfdg"
u.save()
print "qqwwee"
users = User.objects.all()
print "uuuuuuu"
con = {'uf':users}
print "rrrrrrrrre"
return HttpResponseRedirect("/login/")
print "ddddddddddd"

else:
return HttpResponseRedirect("/img/")
#下载
def download(request):
print "wwww"
def file_iterator(file_name, chunk_size = 512):  #32位系统
with open(file_name) as f:
while True:
c = f.read(chunk_size) #迭代器,适用于大小文件
if c:
yield c
else:
break
print "aaaa"
img = r'E:\pywork\mysite\products\static\\'+request.GET.get('img')
print "mmm",type(img),img
#StreamingHttpResponse用于将文件流发送给浏览器,优于HttpResponse
response = StreamingHttpResponse(file_iterator(img))
#让文件流写入硬盘,防止乱码
response["Content-Type"] = "application/octet-stream"
response["Content-Disposition"] = "attachment;filename={0}".format(img)
print "fff"
return response


在views.py里实现了功能之后,需要你在urls.py里配置方法的路径,这里用到了正则表达式,不懂得童鞋,下次再详细说

下面是在urls.py里

from django.conf.urls import patterns, include, url
from django.contrib import admin
from products import views
from django.conf import settings
import os
urlpatterns = patterns('',
# Examples:
# url(r'^$', 'mysite.views.home', name='home'),
# url(r'^blog/', include('blog.urls')),
url(r'^admin/', include(admin.site.urls)),
url(r'^login/', views.Login),
url(r'^dologin/', views.dologin),
url(r'^add/', views.add),
url(r'^addinform/', views.addinform),
url(r'^del/(.+)/$', views.deletett),
url(r'^modify/(.+)/$', views.modify),
url(r'^domodify/(.+)/$', views.domodify),
url(r'^img/', views.img),
url(r'^upload/', views.upload),
url(r'^download/', views.download),
url(r'^static/(?P<path>.*)$','django.views.static.serve',{'document.root':settings.STATICFILES_DIRS}),
url(r'^output/', views.output),
)


以上,就是简单实现用户信息管理的代码实现,当然,代码有很多可以改进的地方,只做参考。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python 界面 框架