网站使用的主色调,网站建设增城,在线看crm系统,网站问题图片创建django项目的步骤#xff1a;Django项目的创建步骤-CSDN博客 一、前置工作 配置数据库#xff0c;设置数据库引擎为mysql 1、在settings文件中找到DATABASES, 配置以下内容 DATABASES {default: {ENGINE: django.db.backends.mysql, # 数据库引擎NAME: dja… 创建django项目的步骤Django项目的创建步骤-CSDN博客 一、前置工作 配置数据库设置数据库引擎为mysql 1、在settings文件中找到DATABASES, 配置以下内容 DATABASES {default: {ENGINE: django.db.backends.mysql, # 数据库引擎NAME: django_test, # 连接的数据库, 一定要存在HOST: 127.0.0.1, # mysql的ip地址, 这里是本地PORT: 3306, # mysql的默认端口USER: root, # mysql的用户名PASSWORD: xxx # mysql的密码}
} 可能会提示以下内容 安装即可 pip install mysqlclient -i https://pypi.tuna.tsinghua.edu.cn/simple 二、编写用户模型 django中使用ORM来存数据到数据库 ORM模型(对象关系映射): 一个 模型类对应数据库中的一张表 一个属性对应数据库中的一个字段 用户表的字段用户名、密码(可以自己扩展) 1、用户模型 2、创建好模型后要执行迁移数据的命令 生成迁移文件python manage.py makemigrations 迁移生效(同步到数据库)python manage.py migrate 3、迁移成功后migrations文件夹下会出现迁移文件该文件记录着模型的相关信息001表示第一次迁移. 三、编写表单校验以注册表单校验为例 使用django自带的Form类来实现校验 1、对字段的校验这里只截了用户名的校验其他字段都差不多 2、对整个表单的校验 User需要从models.py文件中导入 3、form表单中自定义的其他方法 四、编写前端页面纯html文件写在templates文件夹中 使用了模板的方式嵌入数据 超链接的跳转连接{% url 命名空间:路由的name值 %}有命名空间一定要标注命名空间没有则{% url 路由的name值 %} 1、index.html 2、register.html form.non_field_errors表当校验时表单的错误就是forms.py文件中的 raise forms.ValidationError(错误信息)。 form.errors.username: 表单校验时用户名的错误就是forms.py文件中的error_messages信息密码校验也是如此。 3、login.html 五、编写视图类来实现登录、注册功能 如果是get请求就执行get方法是post请求就执行post方法在form标签中的methos方法中可以指定。 form.is_valid()用来校验表单校验成功返回True, 失败则返回False。 post的方法的实例化表单对象实例化表单对象时一定要加request.POST否则拿不到数据。 redirect: 重定向到其他视图函数。 form对象实例化表单对象用来进行表单的各种存在校验错误信息等待 request.session[username] request.POST[username]: 设置session值为用户名(其他值也可以) 六、编写首页和注销视图函数 1、首页函数 request.session.get()通过注册时设置的session中来获取用户通过这个判断是否有登录的用户可以与前端交互有的话就显示注销没有的话显示注册和登录 2、注销函数 清除session值即可 七、编写路由 1、在主路由中include分路由并设置命名空间 命名空间当有多个应用时建议用 能更好的区分各个应用使用namespace关键字设置 2、在app下创建一个urls.py文件编写以下内容 注意一定要加app_name, 视图类一定要加.as_view() 八、django自带的管理后台 使用python manage.py createtsuperuser创建超级用户 1、在admin.py文件中注册模型 list_display在后台管理中要显示的字段 admin.site.site_header后台管理的标题 2、在模型(models.py)中添加 3、使用注册的超级用户登录 九、具体的文件 1、models.py from django.db import modelsclass User(models.Model):# 定义变量对应数据库的表的字段# username参数参数1后台管理显示的内容参数2最大长度, CharField类型必须指定参数3不能为空参数4唯一username models.CharField(用户名, max_length10, nullFalse, uniqueTrue)password models.CharField(密码, max_length255, nullFalse)# create_time参数参数2记录数据第一次创建的时间自动记录到数据库create_time models.DateTimeField(注册时间, auto_now_addTrue)# 设置后台管理class Meta:app_label app # 属于那个appverbose_name 用户verbose_name_plural verbose_name# 输出对象时用到的def __str__(self):return self.username2、forms.py
from django import forms
from .models import Userclass RegisterForm(forms.Form):# 用户名username forms.CharField(requiredTrue, # 不能为空必须max_length10, # 最大长度min_length4, # 最小长度error_messages{required: 不能为空,max_length: 长度不能大于10,min_length: 长度不能小于4,})# 密码password forms.CharField(requiredTrue, # 不能为空必须max_length16, # 最大长度min_length8, # 最小长度error_messages{required: 不能为空,max_length: 长度不能大于16,min_length: 长度不能小于8,})# 校验def clean(self):# 获取输入的用户名username self.cleaned_data.get(username)user User.objects.filter(usernameusername) # 获得一个查询集可以理解为一个列表# 用户存在if user.exists():raise forms.ValidationError(用户已存在)return self.cleaned_data# 存入数据库def save(self):username self.cleaned_data.get(username)password self.cleaned_data.get(password)# 存入数据库user User(usernameusername, passwordpassword)user.save()class LoginForm(forms.Form):# 用户名username forms.CharField(requiredTrue, # 不能为空必须max_length10, # 最大长度min_length4, # 最小长度error_messages{required: 不能为空,max_length: 长度不能大于10,min_length: 长度不能小于4,})# 密码password forms.CharField(requiredTrue, # 不能为空必须max_length16, # 最大长度min_length8, # 最小长度error_messages{required: 不能为空,max_length: 长度不能大于16,min_length: 长度不能小于8,})# 校验def clean(self):# 获取输入的信息username self.cleaned_data.get(username)password self.cleaned_data.get(password)user User.objects.filter(usernameusername) # 获得一个查询集可以理解为一个列表if user.exists():if user[0].password ! password:raise forms.ValidationError(密码错误)else:raise forms.ValidationError(用户不存在)return self.cleaned_data3、admin.py
from django.contrib import admin
from .models import User# Register your models here.
admin.register(User)
class UserAdmin(admin.ModelAdmin):list_display [id, username, create_time]admin.site.site_header django后台管理
4、views.py
from django.shortcuts import render, HttpResponse, redirect
from django.views import View
from .models import User
from .forms import RegisterForm, LoginForm# Create your views here.def index(request):username request.session.get(username, default0) # 通过session获取用户名,给默认值防止报错user User.objects.filter(usernameusername).first()return render(request, index.html, {user: user})class RegisterView(View):def get(self, request):form RegisterForm()return render(request, register.html, {form: form})def post(self, request):form RegisterForm(request.POST)if form.is_valid():form.save()return redirect(app:login)return render(request, register.html, {form: form})class LoginView(View):def get(self, request):form LoginForm()return render(request, login.html, {form: form})def post(self, request):form LoginForm(request.POST)print(登录)if form.is_valid():# 设置sessionrequest.session[username] request.POST[username]return redirect(app:index)return render(request, login.html, {form: form})# 注销
def Logout(request):request.session.clear() # 清除sessionreturn redirect(app:index)
5、app中的urls.py
from django.urls import path
from .views import *app_name appurlpatterns [path(, index, nameindex), # 首页path(register/, RegisterView.as_view(), nameregister), # 注册path(login/, LoginView.as_view(), namelogin), # 登录path(logout, Logout, namelogout), # 注销
]6、主路由urls.py
from django.contrib import admin
from django.urls import path, includeurlpatterns [path(admin/, admin.site.urls),path(, include(app.urls, namespaceapp))
]
7、index.html
!DOCTYPE html
html langen
headmeta charsetUTF-8title首页/title
/head
body{% if user %}h1欢迎{{ user.username }}进入首页/h1a href{% url app:logout %}注销/a
{% else %}h1请注册或登录/h1a href{% url app:register %}注册/aa href{% url app:login %}登录/a
{% endif %}/body
/html
8、register.html
!DOCTYPE html
html langen
headmeta charsetUTF-8title注册/title
/head
body
h3注册/h3
a href{% url app:login %}登录/a|
a href{% url app:index %}首页/a
form action{% url app:register %} methodpost{% csrf_token %}divp stylecolor: red{{ form.non_field_errors }}/p/divdivlable用户名/lablelabelinput typetext nameusername/labelp stylecolor: red{{ form.errors.username }}/p/divdivlable密码/lablelabelinput typepassword namepasswordp stylecolor: red{{ form.errors.password }}/p/label/divbutton typesubmit注册/button
/form
/body/html
9、login.html
!DOCTYPE html
html langen
headmeta charsetUTF-8title登录/title
/head
body
h3登录/h3
a href{% url app:register %}注册/a|
a href{% url app:index %}首页/a
form action{% url app:login %} methodpost{% csrf_token %}divp stylecolor: red{{ form.non_field_errors }}/p/divdivlable用户名/lablelabelinput typetext nameusernamep stylecolor: red{{ form.errors.username }}/p/label/divdivlable密码/lablelabelinput typepassword namepasswordp stylecolor: red{{ form.errors.password }}/p/label/divbutton登录/button
/form/body
/html