5.注册登录

每套系统都会有用户系统,包含注册登录、用户信息等等,博客系统也一样,需要用户登录进来评论,发表自己的文章等等。 这里我们仅仅做一下登录注册。其他的请自行编写。多些才能熟练。

输入表单

在mysite创建forms.py文件

from django import forms

#登录表单,
class LoginForm(forms.Form):
    # 用户名
    username = forms.CharField(
        # 使用的是html中的文本输入库,经过Django 转换后是input标签
        widget=forms.TextInput(attrs={
            'placeholder': '请输入用户名'  # 添加属性
        }),
        max_length=25, # 最大
        required=True, # 必须
        error_messages={'required': "用户名不能为空"}, # 用户输入有误的提示
        )

    password = forms.CharField(widget=forms.PasswordInput(attrs={
        'placeholder': '请输入密码',
    }))

登录模版

在templates创建login.html

<div style="margin-top: 100px; text-align: center">

    <div style="box-shadow:5px 5px 5px 5px #888888; padding:10px; display: inline-block; ">

{#         如果登录信息有误的提示#}
        {% if error %}
            {{ error }}
        {% endif %}

{#        登录表单#}
        <form action="{% url 'login' %}" method="post">
{#            csrf攻击#}
            {% csrf_token %}

            <div>
                用户名:{{ form.username }}
            </div>
            <div>
                密码:{{ form.password }}
            </div>
            <input type="submit" value="登录">
        </form>

        <a href="/">注册</a> | <a href="/">回到首页</a>
    </div>

</div>

登录视图

views.py中

from mysite.forms import LoginForm

# 登录
def login_(request):
    # 如果是post请求
    if request.method == 'POST':
        # 接收请求参数
        form = LoginForm(request.POST)
        # 验证表单是否有效
        if form.is_valid():
            # 查询数据库是否由此用户,以及密码是否匹配, 此处使用的是django自带的系统
            # 也可自己编写
            user = auth.authenticate(username=form.cleaned_data['username'], password=form.cleaned_data['password'])
            if user:
                # 登录
                auth.login(request, user)
                return redirect('/')

            error = '用户名或密码错误'
            return render(request, 'login.html', locals())


    form = LoginForm()
    return render(request, 'login.html', locals())

# 登出
def logout_(request):
    auth.logout(request)
    return redirect('/')

登录入口

修改base.html,增加login入口

<header>
{#    导航#}
    <nav class="nav">
        <ul>
            <li><a href="/">首页</a></li>
            <li><a href="/">技术</a></li>
            <li><a href="/">资讯</a></li>
            <li><a href="/">关于</a></li>
        </ul>

{#    如果用户没有登录显示登录 否则 显示用户名和登出#}
        {% if not request.user.is_authenticated %}
            <a style="float: right; color: white;text-decoration: none" href="{% url 'login' %}">登录/注册</a>
        {% else %}
            <div style="float: right;color: white;">
                {{ user.username }}
                <a style="color: white;text-decoration: none" href="{% url 'logout' %}">登出</a>
            </div>

        {% endif %}
    </nav>

</header>

添加url

修改mysite/urls.py

from .views import index, ArticleDetailView, about,logout_, login_


urlpatterns = [
    path('', index),
    path('detail/<int:id>', ArticleDetailView.as_view(), name='detail'),
    # 登录登出
    path('login/', login_, name='login'),
    path('logout/', logout_, name='logout'),
]

效果

重启服务器,刷新浏览器,可以看到导航右边出现了登录注册

注意:如果看不到,请先退出admin后台的账号,在刷新。

然后点击登录

我们可以使用Admin后台的账号进行登录

注册

注册的实现,留给自己实现。

声明:原创文章,版权所有,转载请注明出处,https://litets.com。