他们说,当你记录你的学习、奋斗等等时,你会获得更多知识。因此,从2024年7月15日这一天开始,我决定通过开发博客应用程序来记录我学习Django的进度,而不使用ChatGPT、Gemini和其他可以生成代码的AI聊天机器人。
过去几年,我一直在 ChatGPT 的帮助下创建应用程序来为我生成代码,结果很棒,我能够构建应用程序。然而,我过于依赖ChatGPT,未能深入理解编程的概念。我觉得在开发应用程序时,如果没有 ChatGPT 的帮助,我不知道如何从头开始编码,而且毫无用处。所以从现在开始,我将尽力阅读和理解文档来构建这个简单的博客应用程序。
本周,我通过创建一个简单的博客应用程序开始了学习 Django 的旅程。我的目标是记录该过程的每一步并展示我的经验和学习。
设置项目
第 1 步:创建虚拟环境
首先,我创建了一个虚拟环境来管理项目依赖项:
python -m venv <myenv> source myenv/bin/activate # On Windows use `myenv\Scripts\activate`
第 2 步:安装 Django 并创建新的 Django 项目
接下来,我安装了 django 并创建了名为 blog_app
的新项目
pip install django # Create new django project django-admin startproject blog_app cd blog_app
第 1 步:设置应用程序
我首先创建了用户身份验证
# Either of the two django-admin startapp user python manage.py startapp user
然后我将新应用程序添加到 settings.py 中的 INSTALLED_APPS 列表中。
第 2 步:创建用户登录和注册表单
我在用户应用程序文件夹中创建了 forms.py 文件。我通过将 Django 内置的 AuthenticationForm 和 UserCreationForm 继承到自定义类来使用它。我想这样以后我就可以自定义用户信息了。
# user/forms.py from django.contrib.auth.forms import AuthenticationForm, UserCreationForm from django.forms.widgets import PasswordInput, TextInput from django.forms.fields import EmailField from django import forms class LoginForm(AuthenticationForm): username = forms.CharField(widget=TextInput()) password = forms.CharField(widget=PasswordInput()) class SignUpForm(UserCreationForm): username = forms.CharField(max_length=150, required=True) email = forms.EmailField(required=True) password1 = forms.CharField(widget=forms.PasswordInput, required=True) password2 = forms.CharField(widget=forms.PasswordInput, required=True) def save(self, commit=True): user = super().save(commit=False) user.email = self.cleaned_data["email"] if commit: user.save() return user
第3步:创建views.py
然后我创建了主页、登录、注销和注册的视图。我不会在这个项目中包含我如何创建 html、css 和 javascript。如果您想检查,我将在下面链接我的 Github 存储库。
# user/views.py from django.shortcuts import render, redirect from django.contrib.auth.decorators import login_required from django.contrib.auth import logout, authenticate, login from .forms import * from django.contrib.auth.models import auth # I use the decorator `login_required` in order for the application to navigate to the login page if the user has not login or sign up yet. @login_required def homeView(request): return render(request, "home.html") def loginView(request): ''' First, I initialized my custom LoginForm then it will check the request of the user. The user will then input it's username and password. Then it will check if the form is valid then it will get the user's input credential and it will authenticate it by using the built-in Django `authenticate` method. It will then check if the user correctly input it's credential and it will call the `login` method of Django and redirect the user to the homepage. ''' form = LoginForm() if request.method == "POST": form = LoginForm(request, data=request.POST) if form.is_valid(): username = request.POST.get("username") password = request.POST.get("password") user = authenticate(request, username=username, password=password) if user is not None: auth.login(request, user) return redirect("user:home") return render(request, "login.html", {"form": form}) def signupView(request): ''' We will get the request from the user and check if the form is valid the we wills ave the user information in our SignUpForm ''' if request.method == "POST": form = SignUpForm(request.POST) if form.is_valid(): form.save() return redirect("user:login") else: form = SignUpForm() return render(request, "signup.html", {"form": form}) def logoutView(request): ''' I use the Django built-in `logout` method to logut the user ''' logout(request) return redirect("user:login")
第 4 步:添加网址
然后我添加了用户的网址。首先,我在 blog_app/urls.py 中添加了一个 home/empty url。
# blog_app/urls.py from django.contrib import admin from django.urls import path, include urlpatterns = [ path("", include("user.urls", "user")), path("admin/", admin.site.urls), ]
然后我在用户目录中添加创建了一个 urls.py。
# user/urls.py from django.urls import path, include from .views import * app_name = "user" urlpatterns = [ path("", homeView, name="home"), path("signup/", signupView, name="sign-up"), path("login/", loginView, name="login"), path("logout/", logoutView, name="logout"), ]
我创建了一个变量 app_name 并分配了用户。在此,正如您在上面的views.py 中看到的,我使用 user:login 而不是 templates/html.py。我了解到,有了这个,如果我要创建一个大型项目,我可以轻松确定我将视图功能重定向到哪个应用程序。
这周,我遇到了一些挑战,例如:
但是,我学到了很多关于 Django 的基础知识以及如何构建项目的知识。我也意识到彻底阅读文档的重要性。好吧,我仍然无法停止使用 ChatGPT 来询问我遇到的错误问题,但我会提示它,这样它就不会给我示例代码,而只是简单的解释。
我计划:
以上是我的博客应用程序入门周的详细内容。更多信息请关注PHP中文网其他相关文章!