"""learning_log URL Configuration
The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/2.2/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: path('', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.urls import include, path
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path,include
urlpatterns = [
#url(r'^admin/',include(admin.site.urls))
path('admin/', admin.site.urls),
#url(r'', include('learning_logs.urls', namespace='learning_logs')),
path('', include('learning_logs.urls', namespace='learning_logs')),
#创建用户账户
path('users/',include('users.urls',namespace='users')),
]
base.html
<p>
<a href = "{% url 'learning_logs:index'%}">Learning Log</a> -
<a href = "{% url 'learning_logs:topics'%}">Topics</a> -
{% if user.is_authenticated %}
Hello,{{user.username}}.
<a href="{% url 'users:logout' %}">log out</a>
{% else %}
<a href="{% url 'users:register' %}">register</a> -
<a href="{% url 'users:login' %}">log in</a>
{% endif %}
</p>
{% block content %}{% endblock content %}
users目录下的urls.py
#为应用程序users定义URL模式
from django.urls import path,include,re_path
from django.contrib.auth.views import LoginView
#句点让python从当前的urls.py模块所在的文件夹中导入视图
from . import views
#
#将login改为LoginView,
#将path('login/', login, {'template_name': 'users/login.html'}, name = 'login')
#改为path('login/', LoginView.as_view(template_name= users/login.htm),name='login')
app_name='users'
urlpatterns = [
#主页
path('login/', LoginView.as_view(template_name= 'users/login.html'),name='login'),
#注销
path('logout/',views.logout_view,name='logout'),
#注册页面
path('register/',views.register,name='register'),
]
views.py
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.shortcuts import render
# Create your views here.
from django.http import HttpResponseRedirect
from django.urls import reverse
from django.contrib.auth import logout,login,authenticate
from django.contrib.auth.forms import UserCreationForm
def logout_view(request):
'''注销用户'''
logout(request)
return HttpResponseRedirect(reverse('learning_logs:index'))
def register(request):
'''注册新用户'''
if request.method!='POST':
#显示空的注册表单
form =UserCreationForm()
else:
#处理填写好的表单
form=UserCreationForm(data=request.POST)
if form.is_valid():
new_user=form.save()
#让用户自动登录,再重定向到主页
authenticated_user=authenticate(username=new_user.username,password=request.POST['password1'])
login(request,authenticated_user)
return HttpResponseRedirect(reverse('learning_logs:index'))
context = {'form':form}
return render(request,'users/register.html',context)
register.html
{% extends "learning_logs/base.html" %}
{% block content %}
<form method ='post' action= "{% url 'users:register' %}">
{% csrf_token %}
{{form.as_p }}
<button name="submit">register</button>
<input type='hidden' name='next' value="{% url 'learning_logs:index' %}"/>
</form>
{% endblock content %}
[24/Oct/2019 11:31:17] "POST /admin/login/?next=/admin/ HTTP/1.1" 200 1982
Exception happened during processing of request from ('127.0.0.1', 51588)
Traceback (most recent call last):
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\socket
server.py", line 647, in process_request_thread
self.finish_request(request, client_address)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\socket
server.py", line 357, in finish_request
self.RequestHandlerClass(request, client_address, self)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\socket
server.py", line 717, in init
self.handle()
File "D:\py3.6.4\python_work\lesson_18\learning_log\ll_env\lib\site-packages\d
jango\core\servers\basehttp.py", line 171, in handle
self.handle_one_request()
File "D:\py3.6.4\python_work\lesson_18\learning_log\ll_env\lib\site-packages\d
jango\core\servers\basehttp.py", line 179, in handle_one_request
self.raw_requestline = self.rfile.readline(65537)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\socket
.py", line 589, in readinto
return self._sock.recv_into(b)