和县建设局网站,百度推广每年600元什么费用,系统繁忙是什么原因,聊天不付费的交友软件一、创建用户账户 将建立一个用户注册和身份验证系统#xff0c;让用户能够注册账户#xff0c;进而登录和注销。我们将创建一个新的应用程序#xff0c;其中包含与处理用户账户相关的所有功能。 创建user 我们首先使用命令 startapp 来创建一个名为 users 的应用程序让用户能够注册账户进而登录和注销。我们将创建一个新的应用程序其中包含与处理用户账户相关的所有功能。 创建user 我们首先使用命令 startapp 来创建一个名为 users 的应用程序 python manage.py startapp users 成功后出现如图文件 修改settings.py 修改项目根目录中的urls.py path(r^users/, include(users.urls, namespaceusers)), 为用户加入登录注销注册页面 编写users/urls.py 为应用程序users定义URL模式
from django.urls import path
#从当前的urls.py模块所在的文件夹中导入视图#变量urlpatterns是一个列表包含可在应用程序learning_logs中请求的网页
app_name users
from django.contrib import admin
from django.urls import path, include
from django.contrib.auth.views import LoginView
from . import views
urlpatterns [
# 登录页面
path(r^login/$,LoginView.as_view(template_nameusers/login.html), namelogin),
# 注销
path(r^logout/$, views.logout_view, namelogout),
# 注册页面
path(r^register/$, views.register, nameregister),
] 编写users/views.py from django.shortcuts import render
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
# Create your views here.def logout_view(request):注销用户logout(request)return HttpResponseRedirect(reverse(learning_logs:index))def register(request):注册新用户if request.method ! POST:# 显示空的注册表单form UserCreationForm()else:# 处理填写好的表单form UserCreationForm(datarequest.POST)if form.is_valid():new_user form.save()# 让用户自动登录再重定向到主页authenticated_user authenticate(usernamenew_user.username,passwordrequest.POST[password1])login(request, authenticated_user)return HttpResponseRedirect(reverse(learning_logs:index))context {form: form}return render(request, users/register.html, context) 编写模板 在users文件下建立如图文件结构 login.html !DOCTYPE html
html langen
headmeta charsetUTF-8titleTitle/title
/head
body
{% extends learning_logs/base.html %}
{% block content %}
{% if form.errors %}
pYour username and password didnt match. Please try again./p
{% endif %}form methodpost action{% url users:login %}
{% csrf_token %}{{ form.as_p }}button namesubmitlog in/buttoninput typehidden namenext value{% url learning_logs:index %} /
/form
{% endblock content %}
/body
/html register.html !DOCTYPE html
html langen
headmeta charsetUTF-8titleTitle/title
/head
body
{% extends learning_logs/base.html %}
{% block content %}
form methodpost action{% url users:register %}
{% csrf_token %}
{{ form.as_p }}
button namesubmitregister/button
input typehidden namenext value{% url learning_logs:index %} /
/form
{% endblock content %}
/body
/html 链接到登录页面 修改base.html文件 !DOCTYPE html
html langen
headmeta charsetUTF-8titleTitle/title
/head
body
pa 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 %}
/body
/html 查看效果 首页 注册页 登录页 登录后 二、用户拥有自己的信息
使用 login_required 限制访问
限制对topics 页面的访问 每个主题都归特定用户所有因此应只允许已登录的用户请求 topics 页面。 修改learning_logs/views.py from django.shortcuts import render
from django.http import HttpResponseRedirect,Http404
from django.urls import reverse
from django.contrib.auth.decorators import login_required
from .models import Topic, Entry
from .forms import TopicForm, EntryForm
# Create your views here.
def index(request):学习笔记的主页return render(request, learning_logs/index.html)
login_required
def topics(request):显示所有的主题topics Topic.objects.filter(ownerrequest.user).order_by(date_added)context {topics: topics}return render(request, learning_logs/topics.html, context)login_required
def topic(request, topic_id):显示单个主题及其所有的条目topic Topic.objects.get(idtopic_id)# 确认请求的主题属于当前用户if topic.owner ! request.user:raise Http404entries topic.entry_set.order_by(-date_added)context {topic: topic, entries: entries}return render(request, learning_logs/topic.html, context)login_required
def new_topic(request):添加新主题if request.method ! POST:# 未提交数据创建一个新表单form TopicForm()else:# POST提交的数据,对数据进行处理form TopicForm(request.POST)if form.is_valid():new_topic form.save(commitFalse)new_topic.owner request.usernew_topic.save()return HttpResponseRedirect(reverse(learning_logs:topics))context {form: form}return render(request, learning_logs/new_topic.html, context)login_required
def new_entry(request, topic_id):在特定的主题中添加新条目topic Topic.objects.get(idtopic_id)if request.method ! POST:# 未提交数据,创建一个空表单form EntryForm()else:# POST提交的数据,对数据进行处理form EntryForm(datarequest.POST)if form.is_valid():new_entry form.save(commitFalse)new_entry.topic topicnew_entry.save()return HttpResponseRedirect(reverse(learning_logs:topic,args[topic_id]))context {topic: topic, form: form}return render(request, learning_logs/new_entry.html, context)login_required
def edit_entry(request, entry_id):编辑既有条目entry Entry.objects.get(identry_id)topic entry.topicif topic.owner ! request.user:raise Http404if request.method ! POST:# 初次请求使用当前条目填充表单form EntryForm(instanceentry)else:# POST提交的数据对数据进行处理form EntryForm(instanceentry, datarequest.POST)if form.is_valid():form.save()return HttpResponseRedirect(reverse(learning_logs:topic, args[topic.id]))context {entry: entry, topic: topic, form: form}return render(request, learning_logs/edit_entry.html, context)为实现这种重定向修改settings.py 在最后加入一行代码 # 我的设置
LOGIN_URL /users/login/ 将数据关联到用户 修改模型 Topic 对models.py进行修改 from django.db import models
from django.contrib.auth.models import User
# Create your models here.
class Topic(models.Model):# 用户学习的主题text models.CharField(max_length200)date_added models.DateTimeField(auto_now_addTrue)owner models.ForeignKey(User,on_deletemodels.CASCADE)def __str__(self):# 返回模型的字符串表示return self.text
class Entry(models.Model):学到的有关某个主题的具体知识topic models.ForeignKey(Topic, on_deletemodels.CASCADE)text models.TextField()date_added models.DateTimeField(auto_now_addTrue)class Meta:verbose_name_plural entriesdef __str__(self):返回模型的字符串表示return self.text[:50] ...在控制台确定当前有哪些用户 再确定用户id 迁移数据库 为验证迁移符合预期可在 shell 会话中像下面这样做 查看效果
登录账号为11_admin时数据库的内容都显示 登录账号为其它时内容为空需要添加内容