Django项目中,已经包含了应用程序city_infos,用于存储城市相关信息,实现增删改查操作。
针对用户管理,需服务器托管要新建项目user.
步骤如下:
1、创建新项目users
启动虚拟环境,导航至项目根目录:C:DPythonPython310studysnap_gram,执行创建应用程序命令。
(sg_env) C:DPythonPython310studysnap_gram>python manage.py startapp users
执行命令后,在根目录下新生成文件夹users,其结构与city_infos相同。
2、将应用程序users纳入Django项目
具体包含两步:
1)修改C:DPythonPython310studysnap_gramsnap_gram目录下的settings.py文件
INSTALLED_APPS = [
#my app
'city_infos',
'users',
2)修改同一路径下的urls.py文件
urlpatterns = [
path('admin/', admin.site.urls),
path('users/',include('users.urls')),
path('',include('city_infos.urls')),
]
这行代码与任何以单词users打头的URL(如http://localhost:8000/users/login/)都匹配。
3、实现用户登录
1)新建C:DPythonPython310studysnap_gramusers路径下的urls.py文件
定义users应用程序中的url,用于用户登录。
登录页面的URL模式与URL http://localhost:8000/users/login/匹配。
'''users urls'''
from django.urls import path, include
app_name = 'users'#命名空间
urlpatterns = [
#通过include方法,使用Django定义的默认身份验证URL
path('',include('django.contrib.auth.urls')),
]
2)新建C:DPythonPython310studysnap_gramuserstemplatesregistration路径下的login.html文件
用户请求登录页面时,Django将使用一个默认的view函数,与之对应的html文件定义如下:
{% extends "city_infos/base.html" %}
{% block content %}
{% if form.errors %}
您的用户名或密码不匹配,请重试。
{% endif %}
{% csrf_token %}
{{ form.as_p }}
{% endblock content %}
3)修改C:DPythonPython310studysnap_gramcity_infostemplatescity_infos路径下的base.html文件
增加‘登录’链接。
City Info--
Cities--
{% if user.is_authenticated %}
Hello,{{user.username}}.
{% else %}
登录
{% endif %}
{% block content %}{% endblock content %}
4、实现用户注销
1)修改C:DPythonPython310studysnap_gramusers路径下的urls.py文件
定义用于注销的URL,127.0.0.1:8000/users/custom_logout。
urlpatterns = [
#通过include方法,使用Django定义的默认身份验证URL
path('',include('django.contrib.auth.urls')),
#注销
path('custom_logout/',views.custom_logout,name='custom_logout'),
]
2)新建C:DPytho服务器托管nPython310studysnap_gramusers路径下的views.py文件
响应注销URL。
from django.shortcuts import render, redirect
from django.contrib.auth import logout
# Create your views here.
def custom_logout(request):
if request.method == 'POST':
logout(request)
return redirect('city_infos:index')
return render(request, 'users/logged_out.html')
3)新建C:DPythonPython310studysnap_gramuserstemplatesusers路径下的logged_out.html文件。
在这一步中,html文件是我们自定义的注销页面,所以不能放在C:DPythonPython310studysnap_gramuserstemplatesregistration路径下。
在服务器中,要求注销操作以post的方式提交。
{% extends "city_infos/base.html" %}
{% block content %}
确认:
确认注销?
{% csrf_token %}
取消
{% endblock content %}
4)修改
添加注销操作链接。这个操作是
{% if user.is_authenticated %}
Hello,{{user.username}}.
注销
以GET方式提交注销时,服务器提示:
Method Not Allowed (GET): /users/logout/
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
相关推荐: 设计模式–职责链模式(Chain of Responsibility Pattern)
职责链模式(Chain of Responsibility Pattern)是一种行为设计模式,它为请求创建了一个接收者对象的链。 这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。 在职责链模式中,通常每个接收者都包含…