django簡單實現注冊登錄模塊


源碼下載:https://files.cnblogs.com/files/hardykay/login.zip

新建項目(我使用pycharm開發,也可以使用如下命令建立項目 )

cmd命令行,前提需要安裝django和配置系統環境變量,這里我就跳過了:

django-admin startproject login

項目建好后通過cd 進入到項目目錄執行以下命令:

python manage.py startapp app01

  

需求分析

  一個登錄注冊系統基本包含哪些功能呢?

  1、首頁

  2、登錄/注冊頁面

  3、驗證登錄信息

  4、驗證注冊信息

  5、注銷模塊

概要設計

  數據庫設計ER圖

   

 

 urls.py文件

urlpatterns = [
    path('admin/', admin.site.urls),
    path('index/', views.index),
    path('registerView/', views.registerView),
    path('register/', views.register),
    path('login/', views.login),
    path('accounts/login/', views.logout),
]
View Code

setting.py文件

# 開發階段放置項目自己的靜態文件
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'statics'),
)
# 執行collectstatic命令后會將項目中的靜態文件收集到該目錄下面來(所以不應該在該目錄下面放置自己的一些靜態文件,因為會覆蓋掉)
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
View Code

數據庫設計

  1、models.py

from django.db import models

# Create your models here.
class User(models.Model):
    username = models.CharField(max_length=50)
    email = models.CharField(max_length=60)
    password = models.CharField(max_length=20)

    def __str__(self):
        print(self.username)
View Code

  2、建立數據庫

# 1. 創建更改的文件
python manage.py makemigrations
# 2. 將生成的py文件應用到數據庫
python manage.py migrate
View Code

 

views.py功能模塊設計

from django.shortcuts import render,HttpResponseRedirect
from django.contrib import auth
from app01.myform import User as FUser
from app01.models import User
from django.contrib.auth.decorators import login_required
# Create your views here.

def index(request):
    user = request.session.get('user',False)

    return render(request,'app01/index.html',{'user':user})
#顯示頁面
def registerView(request):
    user = request.session.get('user', False)
    print(user)
    if not user:
        return render(request, 'app01/login.html')
    else :
        return HttpResponseRedirect('/index/')

#注冊
def register(request):
    check = False
    if request.method == 'POST':
        form = FUser(request.POST)
        if form.is_valid():
            #print(form.cleaned_data)
            user = User(**form.cleaned_data)
            user.save()
            check = True
            return render(request, 'app01/immediate.html',{'check':check})

    return HttpResponseRedirect('/index/')


#登錄
def login(request):

    user = request.POST['username']
    password = request.POST['password']
    result = User.objects.get(username=user,password=password)

    if not result:
        return HttpResponseRedirect('/registerView/')
    else :
       request.session['user'] = user
       return HttpResponseRedirect('/index/')

#注銷
def logout(request):
    auth.logout(request)
    return HttpResponseRedirect('/index/')
完整的views.py

 

首頁模塊設計(index函數)

def index(request):
    user = request.session.get('user',False)

    return render(request,'app01/index.html',{'user':user})
后台代碼
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
{% if not user %}
<a href="/registerView/">注冊/登錄</a>
{% else %}
您已經登錄<a href="/accounts/login/">注銷</a>
{% endif %}
</body>
</html>
前台代碼

前后台是一起的,這里用了兩個系統提供的功能模塊:1、user = request.session.get('user',False)。2、return render(request,'app01/index.html',{'user':user})

1的作用是去鍵為user的session值,如果不存在則返回False,2的作用是將變量的值寫入到模板,第二個參數是模板路徑,第三個參數是需要渲染的字典。

登錄/注冊顯示頁面

def registerView(request):
    user = request.session.get('user', False)
    print(user)
    if not user:
        return render(request, 'app01/login.html')
    else :
        return HttpResponseRedirect('/index/')
后台代碼
<!DOCTYPE html>
<html>
<head>
        <meta charset="utf-8">
        <link href="/static/css/style.css" rel='stylesheet' type='text/css' />
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <script type="application/x-javascript"> addEventListener("load", function() { setTimeout(hideURLbar, 0); }, false); function hideURLbar(){ window.scrollTo(0,1); } </script>
        <!--webfonts-->
        <!--//webfonts-->
</head>
<body>
    <div class="main">
        <div class="header" >
            <h1>Login or Create a Free Account!</h1>
        </div>
        <p>Lorem iopsum dolor sit amit,consetetur sadipscing eliter,sed diam voluptua.At vero  eso et accusam et justo duo dolores et ea rebum. </p>
            <form action="/register/" method="POST">
                <ul class="left-form">
                    <h2>New Account:</h2>
                    <li>
                        <input type="text" name="username"   placeholder="Username" required/>
                        <a href="#" class="icon ticker"> </a>
                        <div class="clear"> </div>
                    </li>
                    {% csrf_token %}
                    <li>
                        <input type="text" name="email"  placeholder="Email" required/>
                        <a href="#" class="icon ticker"> </a>
                        <div class="clear"> </div>
                    </li> 
                    <li>
                        <input type="password" name="password"   placeholder="password" required/>
                        <a href="#" class="icon into"> </a>
                        <div class="clear"> </div>
                    </li> 
                    <li>
                        <input type="password"   placeholder="password" required/>
                        <a href="#" class="icon into"> </a>
                        <div class="clear"> </div>
                    </li> 
                    <label class="checkbox"><input type="checkbox" name="checkbox" checked=""><i> </i>Please inform me of upcoming  w3layouts, Promotions and news</label>
                    <input type="submit" onClick="myFunction()" value="Create Account">
                        <div class="clear"> </div>
                </ul>
            </form>
            <form action="/login/" method="post">
                <ul class="right-form">
                    {% csrf_token %}
                    <h3>Login:</h3>
                    <div>
                        <li><input type="text" name="username"  placeholder="Username" required/></li>
                        <li> <input type="password" name="password"  placeholder="Password" required/></li>
                        <h4>I forgot my Password!</h4>
                            <input type="submit" onClick="myFunction()" value="Login" >
                    </div>
                    <div class="clear"> </div>
                </ul>
                <div class="clear"> </div>
                    
            </form>
            
        </div>
            <!-----start-copyright---->
                       <div class="copy-right">
                        <p>Template 2014. More Templates <a href="http://www.cssmoban.com/" target="_blank" title="模板之家">模板之家</a> - Collect from <a href="http://www.cssmoban.com/" title="網頁模板" target="_blank">網頁模板</a></p> 
                    </div>
                <!-----//end-copyright---->

    
</body>
</html>
前台代碼

驗證注冊信息模塊

  1、建立form系統驗證

from django import forms


class User(forms.Form):
    username = forms.CharField(max_length=50)
    email = forms.CharField(max_length=60)
    password = forms.CharField(max_length=20)
myform.py

  2、后台代碼

def register(request):
    check = False
    if request.method == 'POST':
        form = FUser(request.POST)
        if form.is_valid():
            #print(form.cleaned_data)
            user = User(**form.cleaned_data)
            user.save()
            check = True
            return render(request, 'app01/immediate.html',{'check':check})

    return HttpResponseRedirect('/index/')
View Code

驗證登錄信息模塊

def login(request):

    user = request.POST['username']
    password = request.POST['password']
    result = User.objects.get(username=user,password=password)

    if not result:
        return HttpResponseRedirect('/registerView/')
    else :
       request.session['user'] = user
       return HttpResponseRedirect('/index/')
View Code

注銷

def logout(request):
    auth.logout(request)
    return HttpResponseRedirect('/index/')
View Code

 

 

    

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM