文章目录
实现一个简单的django项目,包含注册登录及后台管理的功能,符合MVC的思想
1. 包含基本的登录注册功能及admin管理功能
2. 对django有个简单的了解
环境配置
1. python 3.7.1
2. django 2.2.7
3. windows环境、pycharm 编辑器
1.创建django项目HelloWorld
创建完成后,目录结构如下
2.创建应用(APP)
在控制台中输入python manage.py startapp myapp
python manage.py startapp myapp
执行成功后,会自动生成一个myapp的文件夹,目录结构如下
3.数据库配置
打开HelloWorld/settings.py配置文件,这是整个django项目的设置中心,找到DATABASES,默认配置的是SQLite数据库,无需安装任何应用就可以直接使用它
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
如果想使用mysql数据库的话,需要将配置改为下图所示的内容
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'test',
'USER': 'root',
'PASSWORD': 'root',
'HOST': 'localhost',
'PORT': '3306',
}
}
name是数据库名,其余的应该不用解释了吧
简单来说,你如果使用的是默认数据库的话,这一步可以跳过
4.模型
- 创建模型
因为我们做的是登录和注册功能,最简单的用户模型可能就是只有用户名和密码了,在myapp/models.py文件中添加
from django.db import models
# Create your models here.
class User(models.Model):
username = models.CharField(max_length=20)
password = models.CharField(max_length=20)
- 启用模型
上面创建模型的代码很少,但做的事情很多,django会自动创建该APP对应生成的数据库表结构
不过,首先要把该APP加入到django项目中,在HelloWorld/settings.py文件中的INSTALLED_APPS添加’myapp’
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'myapp'
]
然后运行命令,
#检测模型文件的更改,保存为迁移文件0001
1. python manage.py makemigrations myapp
#查看即将执行的数据库命令
2. python manage.py sqlmigrate myapp 0001
#执行迁移,生成数据库结构
3. python manage.py migrate
提示下面这些就说明成功了,不同数据库的提示信息可能会有所不同
(venv) D:\forme\HelloWorld>python manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, myapp, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying admin.0003_logentry_add_action_flag_choices... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying auth.0010_alter_group_name_max_length... OK
Applying auth.0011_update_proxy_permissions... OK
Applying myapp.0001_initial... OK
Applying sessions.0001_initial... OK
- 使用模型API
在命令行中执行 python manage.py shell 进入python交互环境
python manage.py shell
在命令行中输入下列命令来写入一条数据
>>> from myapp.models import User
>>> q = User(username='user1',password='123456')
>>> q.save()
>>>> User.objects.all()
<QuerySet [<User: User object (1)>]>
这样数据库表就创建成功了
5.视图和模板
在myapp文件夹下创建一个templates文件夹来放html文件,因为我们只有注册和登录功能,所以只需要两个页面,文件结构如下
login.html
<h1>登录页面</h1>
<form action="/login/" method="post">
{% csrf_token %}
<div>
<input type="text" name="username" value="{{ username }}">
</div>
<input type="password" name="password" value="{{ password }}">
<input type="submit" value="Login">
</form>
register.html
<h1>注册页面</h1>
<form action="/register/" method="post">
{% csrf_token %}
<div>
<input type="text" name="username" value="{{ username }}">
</div>
<span>
<input type="password" name="password" value="{{ password }}">
</span>
<input type="submit" value="Submit">
</form>
{{ status }}
在myapp/views.py中添加代码:
from django.shortcuts import render
from django.http import HttpResponse, Http404
from .models import User
# Create your views here.
def register(request):
status = 'Success!'
username = ''
password = ''
if request.POST:
username = request.POST['username']
password = request.POST['password']
try:
q = User(username=username,password=password)
q.save()
except:
status = 'register error!'
else:
status = 'Success!'
else:
status = ''
return render(request, 'myapp/register.html', {'status': status,'username':username,'password':password})
def login(request):
if request.POST:
username = request.POST['username']
password = request.POST['password']
result = User.objects.filter(username=username)
try:
for user in result:
if user.password == password:
return HttpResponse("Welcome %s " % username)
except:
return Http404()
return HttpResponse("It is not a user, %s" % username)
return render(request,'myapp/login.html')
如何把视图和django项目连接起来呢,当然还是在HelloWorld/settings.py文件中了
from django.contrib import admin
from django.urls import path
from myapp import views
urlpatterns = [
path('admin/', admin.site.urls),
path('register/', views.register),
path('login/', views.login),
]
至此,我们的登录注册功能就完成了
注册页面
登录页面
登录成功页面
6.admin后台管理
在浏览器中输入 http://127.0.0.1:8000/admin/,django默认配置了admin页面,我们要做的就是在admin中注册User模型,在myapp/admin.py文件中添加代码
from django.contrib import admin
from .models import User
# Register your models here.
admin.site.register(User)
这样我们的admin后台管理配置就完成了,不过要想进入admin页面需要先创建一个超级管理员用户,在命令行中输入python manage.py createsuperuser
(venv) D:\forme\HelloWorld>python manage.py createsuperuser
Username (leave blank to use 'administrator'): admin
Email address: #######@qq.com
Password:
Password (again):
The password is too similar to the username.
This password is too short. It must contain at least 8 characters.
This password is too common.
Bypass password validation and create user anyway? [y/N]: y
Superuser created successfully.
这样就创建成功了,进入admin页面看一下
这样我们的后台管理功能也完成了
django自带的后台管理功能可以很方便的帮助我们进行增删查改功能
7.小结
- 本文算是第一步学习django的总结,还有很多细节没有讲到
- 再接再厉,尽快整理出下一篇学习文档