此時數據庫雖然已經添加了數據,但若是你繼續刷新瀏覽器數據庫也會保存重複的數據,javascript
這就須要重定向,咱們須要在咱們刷新瀏覽器的時候,數據庫不會從新添加劇復的數據html
轉發:一次請求和響應,請求的地址沒有發生變化, 請求數據被服務器內部的資源共享java
若是此時刷新頁面就會出現重作現象jquery
重定向:一次以上的請求和響應,請求地址發生一次以上的變化。若是此時刷新頁面不會出現重作現象ajax
咱們須要在咱們的views.py裏面導入redirect和reverse模塊,而後須要在咱們刷新的時候跳轉到另外一個頁面, 修改一下代碼sql
同時咱們須要在BlogUser\urls.py裏邊配置路徑,同時添加app_name='user'shell
接着在blog\urls.py路徑裏邊添加 namespace='user’數據庫
接着咱們從新運行項目 再次提交 能夠看到地址欄內地址再次刷新並不會有變化,數據庫也不會重複保存瀏覽器
註冊新用戶的時候咱們要保證用戶名不能重複 咱們須要修改models.py裏面的內容,爲數據庫添加惟一約束服務器
但這時咱們的數據庫並無發生變化,由於咱們數據庫已經有重複的用戶名了,已經違背了原則,因此咱們能夠將數據庫中生成的兩個表全都刪去而後從新建立
接着咱們須要從新執行manage.py的shell命令---點擊Tools->選擇Run manage.py
咱們依然在manage.py@blog後面輸入那三個命令
一、makemigrations BlogUser---敲回車,由於咱們已經有了0001這個表,因此此次生成的是0002,接着咱們在次執行
二、sqlmigrate BlogUser 0002--敲回車,此步驟可省略,直接輸入第三個命令進行更新
三、migrate BlogUser 0002--敲回車
這時候咱們能夠看見數據庫已經建立了兩個表,而且表是有約束的當我嘗試網表中添加兩個username 都爲a時數據庫報錯
咱們能夠經過修改views.py中的代碼來不讓頁面顯示錯誤,使當有用戶名重複是提示信息直接在頁面上提示
但時這時候咱們必須點擊提交纔會告訴咱們用戶名重複,應該在咱們輸入密碼的時候就告訴咱們用戶名重複
這時候咱們須要使用ajax(ajax: jquery 是一種靜態資源),不須要咱們提交當咱們輸入密碼的時候就能夠告訴咱們用戶名以重複
咱們須要有jquery文件,能夠去官網下載,我使用的是jquery-3.3.1,咱們在blog裏面建立一個static的文件夾,接着又在裏邊建立以js的文件夾把咱們的jquery-3.3.1放進去
接着咱們須要在seeting.py裏面添加咱們的static文件
接下來在register.html中加上javascript
<title>Title</title> <script type="text/javascript" src="/static/js/jquery-3.3.1.js"></script> <script> $(function (){ $("input[name='username']").blur(function () { //alert("") uname=$("input [name='username']").val() CSRF=$("input[name='csrfmiddlewaretoken']").val() $.ajax({ url:'/BlogUser/getUser', data:{'uname':uname,'csrfmiddlewaretoken':CSRF}, type:'POST', success:function (dat) { if (dat=='True'){ $("span").html("用戶名已存在") } else{ $("span").html("用戶名可使用") } } }); }); }); </script> </head>
在這寫完以前咱們須要在views.py定義一個 getUser(),同時須要導入HttpResponse模塊,用來判斷用戶名有沒有重複,同時在頁面中顯示提示信息
而後咱們在BlogUser\urls.py配置一下路徑
而後再啓動項目,輸入用戶名且丟失焦點時,會自動提示用戶名可否使用