初学python和django,做个简单的注册登录功能,供初学者参考。
首先是创建项目,django-admin.py startproject demo
接着创建应用,因为功能简单,所以只创建一个应用 django-admin startapp blog
说明下,数据库我用的是mysql,在settings.py里配置好相关内容,此处掠过。
接着开始代码部分!
首先是urls.py
from django.conf.urls.defaults import patterns, include, url
# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
# Examples:
# url(r'^$', 'First.views.home', name='home'),
# url(r'^First/', include('First.foo.urls')),
# Uncomment the admin/doc line below to enable admin documentation:
# url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
# Uncomment the next line to enable the admin:
url(r'^admin/', include(admin.site.urls)),
url(r'^blog/register/$','blog.views.register'),
url(r'^blog/login/$','blog.views.login'),
url(r'^blog/index/$','blog.views.index'),
url(r'^blog/regsuc/$','blog.views.regsuc'),
url(r'^blog/logout/$','blog.views.logout'),
url(r'^blog/changepwd/$','blog.views.changePwd'),
)
因为第一次用,所以每一步都配置了相关的url。
接着是models.py,因为只有基本的一些信息,所以比较简单。
from django.db import models
class User(models.Model):
username = models.CharField(max_length=30,unique=True)
password = models.CharField(max_length=30)
email = models.EmailField()
tel = models.CharField(max_length=15)
sex = models.CharField(max_length=10,null=True)
name = models.CharField(max_length=15,null=True)
age = models.IntegerField(null=True)
def __unicode__(self):
return self.username
在同步的时候首先要打开mysql服务,命令是service mysqld start
接着执行命令python manage.py syncdb来同步数据库内容
下面是主要的views.py的内容
from django.http import HttpResponse,HttpResponseRedirect
from django.shortcuts import render_to_response
from django import forms
from blog.models import User
#各个页面需要用到的数据模型
class UserForm(forms.Form):
username = forms.CharField()
password = forms.CharField()
email = forms.EmailField()
tel = forms.CharField()
class LoginForm(forms.Form):
username = forms.CharField()
password = forms.CharField()
class Information(forms.Form):
name = forms.CharField()
sex = forms.CharField()
age = forms.IntegerField()
email = forms.EmailField()
tel = forms.CharField()
class ChangePwd(forms.Form):
password = forms.CharField()
newpassword = forms.CharField()
#登录成功后的主页面
def index(req):
username = req.session.get('username')
# user = User.objects.all()
# filter(username__exact = username)
# print user
if req.method == 'POST':
msg = Information(req.POST)
if msg.is_valid():
name = msg.cleaned_data['name']
sex = msg.cleaned_data['sex']
age = msg.cleaned_data['age']
email = msg.cleaned_data['email']
tel = msg.cleaned_data['tel']
User.objects.filter(username__exact=username).update(name=name)
User.objects.filter(username__exact=username).update(sex=sex)
User.objects.filter(username__exact=username).update(age=age)
User.objects.filter(username__exact=username).update(email=email)
User.objects.filter(username__exact=username).update(tel=tel)
return HttpResponseRedirect('/blog/index')
else:
return HttpResponseRedirect('/blog/index')
else:
name = User.objects.get(username__exact=username).name
sex = User.objects.get(username__exact=username).sex
age = User.objects.get(username__exact=username).age
email = User.objects.get(username__exact=username).email
tel = User.objects.get(username__exact=username).tel
return render_to_response('index.html',{'username':username,'name':name,'sex':sex,'age':age,'email':email,'tel':tel})
#注册
def register(req):
if req.method == 'POST':
uf = UserForm(req.POST)
err = 'invalid content,please input again!'
if uf.is_valid():
username = uf.cleaned_data['username']
password = uf.cleaned_data['password']
email = uf.cleaned_data['email']
tel = uf.cleaned_data['tel']
if User.objects.filter(username__exact=username):
return render_to_response('register.html',{'uf':uf,'err':err})
user = User()
user.username = username
user.password = password
user.email = email
user.tel = tel
user.save()
req.session['username'] = username
return HttpResponseRedirect('/blog/regsuc')
else:
return render_to_response('register.html',{'uf':uf,'err':err})
else:
uf = UserForm()
return render_to_response('register.html',{'uf':uf})
#登录及验证
def login(req):
if req.method == 'POST':
uf = LoginForm(req.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:
req.session['username'] = username
return HttpResponseRedirect('/blog/index')
else:
err = 'incorrect username or pwd,please input again.'
return render_to_response('login.html',{'err':err})
else:
uf = UserForm()
return render_to_response('login.html',{'uf':uf})
#注册成功页面
def regsuc(req):
username = req.session.get('username')
return render_to_response('regsuc.html',{'username':username})
#登出
def logout(req):
del req.session['username']
return HttpResponseRedirect('/blog/login')
#修改密码
def changePwd(req):
username = req.session.get('username')
if req.method == 'POST':
cp = ChangePwd(req.POST)
if cp.is_valid():
# print 'zhixing is valid'
password = cp.cleaned_data['password']
user = User.objects.filter(username__exact = username,password__exact = password)
if user:
# print 'zhixing user'
newpassword = cp.cleaned_data['newpassword']
User.objects.filter(username__exact = username).update(password=newpassword)
return HttpResponseRedirect('/blog/index')
else:
err = 'old password was incorrect,please check.'
return render_to_response('changepwd.html',{'err':err,'username':username})
else:
# print 'zhixing not valid'
err = 'invalid content,please input again.'
return render_to_response('changepwd.html',{'err':err,'username':username})
else:
# print 'zhixing not POST'
cp = LoginForm()
return render_to_response('changepwd.html',{'username':username})
最后就是html文件的前端展示了,因为我前端不熟悉,所以做的很难看,只有简单的html代码。贴在下一篇,有兴趣可以直接拷贝了看效果。