經過一些文檔的理解,以及一些時間的琢磨。我覺得可以用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,講的有點亂七八糟的