簡體   English   中英

在 Django 注冊中,如果用戶名已經存在,做一些事情

[英]In Django registration, if username already exists do something

這是 Django 中一個非常基本和快速的問題。

所以在我看來,在我處理注冊的地方,如果用戶嘗試使用已經存在的用戶名進行注冊,我只想給出一條消息,比如表單旁邊的一個跨度,說“錯誤的用戶名”。

如何打印該消息?

謝謝你。

這是我的部分代碼:

def register(request):
 if request.method == 'POST':
  if User.objects.filter(username = request.POST['username']).exists():
   #I want to show next to the username textfield in registration form,
   #a span for example that says "Wrong Username"

正如上面的評論中所建議的,您應該使用 form 的 clean 方法進行操作,這會使事情變得更容易。 但是,如果您必須在視圖中執行此操作,這里有一個示例:

if request.method == 'POST':
    try:
        user_exists = User.objects.get(username=request.POST['username'])
        return HttpResponse("Username already taken")
    except User.DoesNotExist:
        # Username doesn't exist
        # Do other validation ...

然后使用 jQuery 或其他東西在span顯示響應。

要獲取 HTTPResponse 消息,您必須使用 ajax 代替表單提交。

在這里,我假設您正在使用以下類似 html 頁面代碼。

<input type="text" name="username" id="username"/>  <p id="error"></p>

<input type="button" value="Register" id="register">

現在,您必須對按鈕的單擊事件進行 ajax 調用,例如:

(我假設您了解 ajax 調用。)

$("#register").on('click', function(){

var username=$("#username").val();

    $.ajax({
    .
    .
    .
    success: fuinction(data){
        if(data=="error occured"){
           $("error").append("wrong username");
    }
    }

    })

    });

和 views.py 代碼是這樣的:

def register(request):
 if request.method == 'POST':
  if User.objects.filter(username = request.POST['username']).exists():
    return HTTPResponse("error occured")

我想修改上面的答案,這樣可以更容易....我想:)哈哈:

def register(request):

    alert = {
        "username": request.GET.get('username', ''),
    }

    if request.method == 'POST':
        username = request.POST.get('username', '')

        if User.objects.filter(username = request.POST['username']).exists():
            alert['username'] = "Username already exists"


    return render(request, 'interface/signup.html', alert)

在你的 html 中:讓我們說 -->

<form method="POST"> {% csrf_token %}

    <h3>Sign Up</h3>

    <label class="label">Username:</label><input type="text" name="username" class="form-control" /><br>

{% if username %}
    <div class="alert alert-danger alert-dismissible">
        <a href="#" class="close" data-dismiss="alert" aria-label="close">&times;</a>
        {{ username }}
    </div>
    <br>
{% endif %}
</form>
def register(request):
    form = UserCreationForm(request.POST)
    if form.is_valid():

    else:
        # Form is invalid, this includes the user already existing

我知道這已經晚了 2 年,但沒有一個答案是這樣,django 有一種內置的解決方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM