django實現簡易登錄注冊


經過一些文檔的理解,以及一些時間的琢磨。我覺得可以用django做一些小項目了

先說說登錄功能吧。

先創建一個app,用admin命令

在cmd打開到manage.py同級目錄下,django-admin startapp appname。

如果還沒有項目,先startproject。我這邊app名字是login_new。創建成功后在pycharm打開該項目。首先,我們要建立一個模型。

為了只是實現功能,我這邊只用了兩個字段,user和password。在models文件輸入代碼

from django.db import models

class User(models.Model):
    user = models.CharField(max_length=20)
    password = models.CharField(max_length=200)

    def __str__(self):
        return self.user

# Create your models here.

CharField是字段類型,models還有其他的類型,具體的可以去看下文檔,這個字段比較特殊,需要字段長度,見括號里。這樣為止,模型就建好了,比較簡單。

先聲明下,我一般比較喜歡先從models開始,看了一些教程都是從別的開始。都一樣,怎么理解怎么來吧

然后,把這個模型添加到admin文件里,

from django.contrib import admin
from .models import User

admin.site.register(User)
# Register your models here.

'login_new.apps.LoginNewConfig'這句加入setting里的app配置下,如下圖

然后創建生成數據庫的腳本python manage.py makemigrations login_new,成功后,輸入python manage.py migrate去數據庫建表。需要下載mysqlclient包的自覺下載,安裝不了的https://www.cnblogs.com/afei123/p/11240182.html

做完上面這些,對其他語言來說寫完一半了,后台完成好了。你可以python manage.py runserver啟動服務區admin里看看是不是可以創建新賬號了。

這些做完,就得去做視圖的事了。

首先先解決url,去project下的urls里面配置。在下面加上

    path('testapp/',include('testApp.urls')),

這句話,之后就可以去app下的urls里面修改了。首先先去views文件下創建一個login函數,我這邊直接貼成品代碼吧。

from django.shortcuts import render
from .models import User

def login(request):
    context = {}
    #設置狀態
    context['stat'] = 'login'
    if 'user' and 'password' in request.GET:  #如果有數據提交了的話
        #傳遞數據
        user = request.GET['user']
        #去數據庫查詢user
        passw = User.objects.get(user=user)

        if request.GET['password'] == passw.password:       #對比數據
            context['titl1'] = 'success'
            context['name'] = request.GET['user']
            #成功后跳轉成功頁面
            return render(request, 'login/results.html', context)
        else:               #對比失敗,修改狀態
            context['wrong'] = 'failed'
    else:
        context['wrong'] = '請輸入數據'
    #失敗停留在原來的界面
    return render(request,'login/login.html',context)

上述代碼其實是跟html文件相對應,request.GET取參數,返回的是一個字典類型,我們在后台創建一個字典類型context用來將數據返回給前端,context的key值對應的是html里設置的,先貼一下我的目錄結構和login.html代碼

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>{{title1}}</title>
</head>
<body>
    <form action="/login" method="get">
        <input type="text" name="user">
        <input type="password" name="password">
        <input type="submit" value="登錄">
    </form>
    {% if wrong %}
        <h1>{{wrong}}</h1>
    {% endif %}
</body>
</html>

先說明一下,因為我把urls分過來了,所以自己創建了一個urls文件,用來指定url,代碼入下

from django.urls import path
from . import views

app_name = 'login_new'

urlpatterns = [
  #127.0.0.1:8000/login path(
'',views.login,name='login'),
  #127.0.0.1:8000/login/regist
path(
'regist',views.regist,name='regist'), ]

這表明我指定了兩個url,一個對應login,一個對應regist,整段復制進代碼的時候記得先去views里def一個regist方法。

回歸到login,實現了之后再去看就覺得很簡單,實際上就是一個數據傳遞,然后對模板不是很懂的話可以去看一下,jinja2。

在login.html里我們創建了一個form和一個,{{wrong}},這會返回錯誤,如果后台里wrong里有值,那么就會顯示這一行。

按理說上述代碼就完成了登錄,結果如下

登錄成功

這邊忘了results文件,代碼如下

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>results</title>
</head>
<body>
<a href="/login">dengzhu</a>
</body>
<h1>{{stat}}success!!!!</h1>
<h1>welcome ,{{name}}!</h1>
</html>

不過忘了處理錯誤數據了,輸入錯的會直接報錯

這個程序的url中會直接暴露密碼,安全性也不是很足。

然后下面是regist的代碼和html。

def regist(request):
    context = {}
    context['stat'] = 'regist'
    if 'user' and 'password' in request.GET:
        name = request.GET['user']
        password = request.GET['password']

        new_user = User(user=name,password=password)

        new_user.save()
        context['name'] = name

        return render(request,'login/results.html',context)
    else:
        context['wrong'] = '請輸入數據'

    return render(request,'login/regist.html',context)

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>regist</title>
</head>
<body>
    <form action="/login/regist" method="get">
        <input type="text" name="user">
        <input type="password" name="password">
        <input type="submit" value="注冊">
    </form>
<h1>{{wrong}}</h1>
</body>
</html>

regist那段沒什么含量,我完成login功能后十分鍾就寫完了。

emmmm,講的有點亂七八糟的

 


免責聲明!

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



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