Python期末作业(记录)

随笔一篇,以便日后翻阅,如有问题欢迎指正
操作环境:Python 3.9.12 & 通义千问 v.2.1.0 & ChatGPT 3.5



1、使用Django建立一个简单的用户注册和登录界面

通义千问


ps:以下内容由通义千问生成


以下是一个简单的使用Django用户注册和登录界面的示例:

首先,确保你已经安装了Django。如果没有,可以使用以下命令进行安装:

pip install django

然后,创建一个新的Django项目和应用:

django-admin startproject mysite
cd mysite
python manage.py startapp accounts

accounts应用中,创建一个views.py文件,编写以下代码:

from django.contrib.auth import authenticate, login, logout
from django.contrib.auth.forms import UserCreationForm
from django.shortcuts import render, redirect

def register(request):
    if request.method == 'POST':
        form = UserCreationForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('login')
    else:
        form = UserCreationForm()
    return render(request, 'accounts/register.html', {'form': form})

def login_view(request):
    if request.method == 'POST':
        username = request.POST['username']
        password = request.POST['password']
        user = authenticate(request, username=username, password=password)
        if user is not None:
            login(request, user)
            return redirect('home')
        else:
            return render(request, 'accounts/login.html', {'error_message': 'Invalid username or password'})
    return render(request, 'accounts/login.html')

def logout_view(request):
    logout(request)
    return redirect('login')

accounts应用中,创建一个urls.py文件,编写以下代码:

from django.urls import path
from . import views

urlpatterns = [
    path('register/', views.register, name='register'),
    path('login/', views.login_view, name='login'),
    path('logout/', views.logout_view, name='logout'),
]

在项目的mysite/urls.py文件中,添加以下代码来包含accounts应用的URLs:

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('accounts/', include('accounts.urls')),
]

accounts应用中,创建一个templates目录,并在其下创建两个HTML文件:register.htmllogin.html

register.html

<!DOCTYPE html>
<html>
<head>
    <title>Register</title>
</head>
<body>
    <h2>Register</h2>
    <form method="post">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit">Register</button>
    </form>
    <p><a href="{% url 'login' %}">Already have an account? Log in here.</a></p>
</body>
</html>

login.html

<!DOCTYPE html>
<html>
<head>
    <title>Login</title>
</head>
<body>
    <h2>Login</h2>
    {% if error_message %}
        <p><strong>{{ error_message }}</strong></p>
    {% endif %}
    <form method="post">
        {% csrf_token %}
        <label for="username">Username:</label>
        <input type="text" id="username" name="username"><br><br>
        <label for="password">Password:</label>
        <input type="password" id="password" name="password"><br><br>
        <button type="submit">Login</button>
    </form>
    <p><a href="{% url 'register' %}">Don't have an account? Register here.</a></p>
</body>
</html>

最后,运行服务器:

python manage.py runserver

现在,你可以访问http://127.0.0.1:8000/accounts/register/来注册新用户,访问http://127.0.0.1:8000/accounts/login/来登录用户。


Chatgpt


ps:以下内容由chatgpt生成


提问:对于一个初学编程的人而言,该如何用Python3使用Django建立一个简单的用户注册和登录界面,且分步解释每个操作的详细原理

理解你的需求,我将为初学者提供详细的步骤和原理,以帮助他们理解如何使用Python 3和Django建立一个简单的用户注册和登录界面。

步骤 1: 安装 Django

首先,我们需要安装Django。打开终端(或命令提示符),运行以下命令:

pip install django

原理: Django是一个使用Python编写的开发框架,它提供了许多工具和库,使得Web开发更加简单和高效。

步骤 2: 创建 Django 项目

在终端中,运行以下命令创建一个新的Django项目:

django-admin startproject myproject

原理: Django项目是一个包含设置和配置的目录,它为你的Web应用提供了基本的结构。

步骤 3: 进入项目目录

进入新创建的Django项目目录:

cd myproject

原理: 在终端中,cd命令用于改变当前的工作目录。

步骤 4: 创建 Django 应用

在项目目录中,运行以下命令创建一个新的Django应用:

python manage.py startapp myapp

原理: Django应用是一个包含应用程序代码的目录,用于组织和管理与应用程序相关的文件。

步骤 5: 配置用户模型

myapp/models.py 文件中,创建一个自定义用户模型:

# myapp/models.py
from django.db import models
from django.contrib.auth.models import AbstractUser

class CustomUser(AbstractUser):
    pass

原理: Django提供了默认的用户模型(User),但我们可以通过创建一个新的模型来定制用户模型。在这里,我们创建了一个名为CustomUser的模型,继承自AbstractUser,以添加一些自定义字段。

步骤 6: 运行数据库迁移

在终端中运行以下命令,将新的用户模型应用到数据库:

python manage.py makemigrations
python manage.py migrate

原理: 数据库迁移是一种管理数据库模式变更的方法。makemigrations用于创建迁移文件,migrate用于应用这些迁移文件以更新数据库。

步骤 7: 创建用户注册和登录表单

myapp/forms.py 文件中,创建用户注册和登录表单:

# myapp/forms.py
from django import forms
from django.contrib.auth.forms import UserCreationForm, AuthenticationForm

class SignUpForm(UserCreationForm):
    class Meta:
        model = CustomUser
        fields = ('username', 'password1', 'password2')

class LoginForm(AuthenticationForm):
    pass

原理: Django提供了用于处理用户认证的表单,我们在这里创建了SignUpFormLoginFormSignUpForm用于用户注册,LoginForm用于用户登录。

步骤 8: 创建用户注册和登录视图

myapp/views.py 文件中,创建用户注册和登录视图:

# myapp/views.py
from django.shortcuts import render, redirect
from django.contrib.auth import login, authenticate
from .forms import SignUpForm, LoginForm

def signup(request):
    if request.method == 'POST':
        form = SignUpForm(request.POST)
        if form.is_valid():
            user = form.save()
            login(request, user)
            return redirect('home')  # 重定向到首页
    else:
        form = SignUpForm()
    return render(request, 'myapp/signup.html', {'form': form})

def user_login(request):
    if request.method == 'POST':
        form = LoginForm(request, request.POST)
        if form.is_valid():
            user = form.get_user()
            login(request, user)
            return redirect('home')  # 重定向到首页
    else:
        form = LoginForm()
    return render(request, 'myapp/login.html', {'form': form})

原理: Django视图处理HTTP请求并返回HTTP响应。在这里,我们创建了signupuser_login视图,用于处理用户注册和登录。

步骤 9: 配置 URLs

myproject/urls.py 文件中配置URL路由:

# myproject/urls.py
from django.contrib import admin
from django.urls import path, include
from myapp.views import signup, user_login

urlpatterns = [
    path('admin/', admin.site.urls),
    path('signup/', signup, name='signup'),
    path('login/', user_login, name='login'),
    path('', include('django.contrib.auth.urls')),  # 提供默认的登录、注销等视图
]

原理: URL配置定义了访问Web应用程序不同部分的路径。在这里,我们为用户注册和登录分别配置了signuplogin路径。

步骤 10: 创建模板文件

myapp/templates/myapp 文件夹中创建 signup.htmllogin.html 模板文件:

<!-- myapp/templates/myapp/signup.html -->
<!DOCTYPE html>
<html>
<head>
    <title>Sign Up</title>
</head>
<body>
    <h2>Sign Up</h2>
    <form method="post" action="{% url 'signup' %}">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit">Sign Up</button>
    </form>
</body>
</html>
<!-- myapp/templates/myapp/login.html -->
<!DOCTYPE html>
<html>
<head>
    <title>Login</title>
</head>
<body>
    <h2>Login</h2>
    <form method="post" action="{% url 'login' %}">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit">Login</button>
    </form>
</body>
</html>

原理: Django使用模板引擎来生成HTML。在这里,我们创建了两个简单的HTML模板文件,用于用户注册和登录页面。


2、使用Django建议一个博客站点,要求至少可以发布、删除、修改和查看博文

通义千问


ps:以下内容由通义千问生成


以下是一个简单的使用Django创建博客站点的示例,包括发布、删除、修改和查看博文的功能:

首先,确保你已经安装了Django。如果没有,可以使用以下命令进行安装:

pip install django

然后,创建一个新的Django项目和应用:

django-admin startproject myblog
cd myblog
python manage.py startapp blog

blog应用中,编写以下模型(在models.py文件中):

from django.db import models
from django.contrib.auth.models import User

class Post(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    pub_date = models.DateTimeField('date published')
    author = models.ForeignKey(User, on_delete=models.CASCADE)

    def __str__(self):
        return self.title

运行以下命令来创建数据库表:

python manage.py makemigrations blog
python manage.py migrate

blog应用中,编写以下视图(在views.py文件中):

from django.shortcuts import render, get_object_or_404, redirect
from .models import Post
from .forms import PostForm

def post_list(request):
    posts = Post.objects.order_by('-pub_date')
    return render(request, 'blog/post_list.html', {'posts': posts})

def post_detail(request, pk):
    post = get_object_or_404(Post, pk=pk)
    return render(request, 'blog/post_detail.html', {'post': post})

def post_new(request):
    if request.method == "POST":
        form = PostForm(request.POST)
        if form.is_valid():
            post = form.save(commit=False)
            post.author = request.user
            post.save()
            return redirect('post_detail', pk=post.pk)
    else:
        form = PostForm()
    return render(request, 'blog/post_edit.html', {'form': form})

def post_edit(request, pk):
    post = get_object_or_404(Post, pk=pk)
    if request.method == "POST":
        form = PostForm(request.POST, instance=post)
        if form.is_valid():
            post = form.save(commit=False)
            post.author = request.user
            post.save()
            return redirect('post_detail', pk=post.pk)
    else:
        form = PostForm(instance=post)
    return render(request, 'blog/post_edit.html', {'form': form})

def post_delete(request, pk):
    post = get_object_or_404(Post, pk=pk)
    post.delete()
    return redirect('post_list')

blog应用中,编写以下表单(在forms.py文件中):

from django import forms
from .models import Post

class PostForm(forms.ModelForm):
    class Meta:
        model = Post
        fields = ('title', 'content')

blog应用中,创建一个urls.py文件,编写以下代码:

from django.urls import path
from . import views

urlpatterns = [
    path('', views.post_list, name='post_list'),
    path('post/<int:pk>/', views.post_detail, name='post_detail'),
    path('post/new/', views.post_new, name='post_new'),
    path('post/<int:pk>/edit/', views.post_edit, name='post_edit'),
    path('post/<int:pk>/delete/', views.post_delete, name='post_delete'),
]

在项目的mysite/urls.py文件中,添加以下代码来包含blog应用的URLs:

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('blog/', include('blog.urls')),
]

blog应用中,创建一个templates目录,并在其下创建四个HTML文件:post_list.htmlpost_detail.htmlpost_edit.html

post_list.html

<!DOCTYPE html>
<html>
<head>
    <title>Blog Posts</title>
</head>
<body>
    <h1>Blog Posts</h1>
    {% for post in posts %}
        <h2><a href="{% url 'post_detail' pk=post.pk %}">{{ post.title }}</a></h2>
        <p>Published on {{ post.pub_date }} by {{ post.author }}</p>
    {% endfor %}
    <a href="{% url 'post_new' %}">Add a new post</a>
</body>
</html>

post_detail.html

<!DOCTYPE html>
<html>
<head>
    <title>{{ post.title }}</title>
</head>
<body>
    <h1>{{ post.title }}</h1>
    <p>Published on {{ post.pub_date }} by {{ post.author }}</p>
    <p>{{ post.content|linebreaks }}</p>
    <a href="{% url 'post_edit' pk=post.pk %}">Edit this post</a>
    <a href="{% url 'post_delete' pk=post.pk %}">Delete this post</a>
</body>
</html>

post_edit.html

<!DOCTYPE html>
<html>
<head>
    <title>Edit Post</title>
</head>
<body>
    <h1>Edit Post</h1>
    <form method="post">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit">Save changes</button>
    </form>
    <a href="{% url 'post_detail' pk=post.pk %}">Cancel</a>
</body>
</html>

最后,运行服务器:

python manage.py runserver

现在,你可以访问http://127.0.0.1:8000/blog/来查看博客列表,点击标题进入文章详情页面,点击"Add a new post"链接创建新文章,点击"Edit this post"和"Delete this post"链接分别编辑和删除文章。注意,为了使用用户认证功能,你需要先注册和登录用户。你可以通过Django的内置用户模型和视图来实现这一点。


chatgpt


ps:以下内容由chatgpt生成


提问:对于一个初学编程的人而言,该如在Python3使用Django建议一个博客站点,要求实现可以发布、删除、修改和查看博文的功能,且分步解释每个操作的详细原理

当建立一个博客站点时,我们需要实现一些基本的功能,包括发布、删除、修改和查看博文。以下是在Python 3中使用Django建立这样一个博客站点的详细步骤,每个步骤都附有解释。

步骤 1: 安装 Django

确保你已经安装了Python 3。在终端(或命令提示符)中运行以下命令来安装Django:

pip install django

原理: Django是一个用于构建Web应用程序的Python框架,提供了许多工具和库,使得开发更加简单。

步骤 2: 创建 Django 项目

在终端中,运行以下命令创建一个新的Django项目:

django-admin startproject myproject

原理: Django项目是一个包含配置和设置的目录,用于组织和管理Web应用程序。

步骤 3: 进入项目目录

进入新创建的Django项目目录:

cd myproject

原理: 使用cd命令切换到项目目录。

步骤 4: 创建 Django 应用

在项目目录中,运行以下命令创建一个新的Django应用:

python manage.py startapp myapp

原理: Django应用是一个包含应用程序代码的目录,用于组织和管理与应用程序相关的文件。

步骤 5: 定义博客模型

myapp/models.py 文件中,定义一个博客模型:

# myapp/models.py
from django.db import models

class Blog(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.title

原理: 在Django中,模型用于定义数据的结构。这里我们创建了一个名为Blog的模型,包含博客的标题、内容以及创建和更新时间。

步骤 6: 运行数据库迁移

在终端中运行以下命令,将博客模型应用到数据库:

python manage.py makemigrations
python manage.py migrate

原理: 数据库迁移是一种管理数据库模式变更的方法。makemigrations用于创建迁移文件,migrate用于应用这些迁移文件以更新数据库。

步骤 7: 创建博客表单

myapp/forms.py 文件中,创建一个博客表单:

# myapp/forms.py
from django import forms
from .models import Blog

class BlogForm(forms.ModelForm):
    class Meta:
        model = Blog
        fields = ['title', 'content']

原理: Django表单用于处理用户输入。这里我们创建了一个BlogForm,它基于Blog模型,并包含了博客的标题和内容字段。

步骤 8: 创建博客视图

myapp/views.py 文件中,创建博客视图:

# myapp/views.py
from django.shortcuts import render, get_object_or_404, redirect
from .models import Blog
from .forms import BlogForm

def blog_list(request):
    blogs = Blog.objects.all()
    return render(request, 'myapp/blog_list.html', {'blogs': blogs})

def blog_detail(request, blog_id):
    blog = get_object_or_404(Blog, pk=blog_id)
    return render(request, 'myapp/blog_detail.html', {'blog': blog})

def blog_create(request):
    if request.method == 'POST':
        form = BlogForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('blog_list')
    else:
        form = BlogForm()
    return render(request, 'myapp/blog_form.html', {'form': form})

def blog_edit(request, blog_id):
    blog = get_object_or_404(Blog, pk=blog_id)
    if request.method == 'POST':
        form = BlogForm(request.POST, instance=blog)
        if form.is_valid():
            form.save()
            return redirect('blog_detail', blog_id=blog_id)
    else:
        form = BlogForm(instance=blog)
    return render(request, 'myapp/blog_form.html', {'form': form})

def blog_delete(request, blog_id):
    blog = get_object_or_404(Blog, pk=blog_id)
    blog.delete()
    return redirect('blog_list')

原理: Django视图处理HTTP请求并返回HTTP响应。这里,我们创建了用于列出、查看、创建、编辑和删除博客的不同视图函数。

步骤 9: 配置 URLs

myapp/urls.py 文件中配置博客应用的URL路由:

# myapp/urls.py
from django.urls import path
from .views import blog_list, blog_detail, blog_create, blog_edit, blog_delete

urlpatterns = [
    path('blogs/', blog_list, name='blog_list'),
    path('blogs/<int:blog_id>/', blog_detail, name='blog_detail'),
    path('blogs/create/', blog_create, name='blog_create'),
    path('blogs/<int:blog_id>/edit/', blog_edit, name='blog_edit'),
    path('blogs/<int:blog_id>/delete/', blog_delete, name='blog_delete'),
]

原理: URL配置定义了访问Web应用程序不同部分的路径。在这里,我们为博客列表、博客详情、创建、编辑和删除分别配置了不同的路径。

步骤 10: 创建模板文件

myapp/templates/myapp 文件夹中创建模板文件,分别为blog_list.htmlblog_detail.htmlblog_form.html

<!-- myapp/templates/myapp/blog_list.html -->
<!DOCTYPE html>
<html>
<head>
    <title>Blog List</title>
</head>
<body>
    <h2>Blog List</h2>
    {% for blog in blogs %}
        <p><a href="{% url 'blog_detail' blog.id %}">{{ blog.title }}</a></p>
    {% endfor %}
    <p><a href="{% url 'blog

_create' %}">Create New Blog</a></p>
</body>
</html>
<!-- myapp/templates/myapp/blog_detail.html -->
<!DOCTYPE html>
<html>
<head>
    <title>{{ blog.title }}</title>
</head>
<body>
    <h2>{{ blog.title }}</h2>
    <p>{{ blog.content }}</p>
    <p>Created at: {{ blog.created_at }}</p>
    <p>Updated at: {{ blog.updated_at }}</p>
    <p><a href="{% url 'blog_list' %}">Back to Blog List</a></p>
    <p><a href="{% url 'blog_edit' blog.id %}">Edit Blog</a></p>
    <p><a href="{% url 'blog_delete' blog.id %}">Delete Blog</a></p>
</body>
</html>
<!-- myapp/templates/myapp/blog_form.html -->
<!DOCTYPE html>
<html>
<head>
    <title>{% if form.instance.pk %}Edit{% else %}Create{% endif %} Blog</title>
</head>
<body>
    <h2>{% if form.instance.pk %}Edit{% else %}Create{% endif %} Blog</h2>
    <form method="post" action="{% if form.instance.pk %}{% url 'blog_edit' form.instance.pk %}{% else %}{% url 'blog_create' %}{% endif %}">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit">Save</button>
    </form>
</body>
</html>

原理: Django使用模板引擎来生成HTML。在这里,我们创建了用于博客列表、博客详情和博客创建/编辑的HTML模板文件。

  • 17
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PiB

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值