django2.0 快速实现注册

django 快速实现注册

本操作环境:

虚拟环境:django2.0 python3.5(应该python3.6都可以使用) window10

1.创建项目与应用(项目和应用都是自己制定的)

创建项目:django-admin startproject register

然后进入register文件夹里面 cd register

在当前目录下面创建一个app应用

python manage.py startapp app

操作顺序如下,workon django2.0,—->这个相当于开启虚拟环境(django2.0是虚拟环境的名称,自己随便定)

F:\益达学习\django\django2.0项目>workon django2.0
(django2.0) F:\益达学习\django\django2.0项目>django-admin startproject register

(django2.0) F:\益达学习\django\django2.0项目>cd register

(django2.0) F:\益达学习\django\django2.0项目\register>python manage.py startapp app

register文件夹的目录结构如下:查看目录结构的—>tree /f

(django2.0) F:\益达学习\django\django2.0项目\register>tree /f
卷 娱乐 的文件夹 PATH 列表
卷序列号为 FEA8-6CC1
F:.
│  manage.py
│
├─app
│  │  admin.py
│  │  apps.py
│  │  models.py
│  │  tests.py
│  │  views.py
│  │  __init__.py
│  │
│  └─migrations
│          __init__.py
│
└─register
    │  settings.py
    │  urls.py
    │  wsgi.py
    │  __init__.py
    │
    └─__pycache__
            settings.cpython-35.pyc
            __init__.cpython-35.pyc

打开register\register\settings.py文件,将app(应用的名字)应用添加进去

# Application definition

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app',
]

2.设计/修改Model(数据库)

打开register\app\models.py文件,添加如下内容:

from django.db import models

class User(models.Model):
    username = models.CharField(max_length = 50)
    password = models.CharField(max_length = 50)
    email = models.EmailField()

    def __str__(self):
        return self.username

创建三个字段,用户存放用户名、密码、email 地址等。

生成迁移文件,同步到数据库

生成迁移文件:根据模型类生成sql语句,迁移文件被生成到应用(app)的migrations目录

python manage.py makemigrations

执行迁移:执行sql语句生成数据表

python manage.py migrate

(django2.0) F:\益达学习\django\django2.0项目\register>python manage.py makemigrations
Migrations for 'app':
  app\migrations\0001_initial.py
    - Create model User

(django2.0) F:\益达学习\django\django2.0项目\register>python manage.py migrate
Operations to perform:
  Apply all migrations: admin, app, auth, contenttypes, 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 app.0001_initial... 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 sessions.0001_initial... OK

3.创建视图(views.py)

①打开register\app\views.py文件,添加如下内容:

from django.shortcuts import render,render_to_response
from django import forms
from django.http import HttpResponse,HttpResponseRedirect
from django.template import RequestContext
from app.models import User


# Create your views here.
#自定义表单模型
class UserForm(forms.Form):
    username = forms.CharField(label = '用户名:',max_length = 100)
    password = forms.CharField(label = '密码:',widget=forms.PasswordInput())
    email = forms.EmailField(label = '电子邮件:')

def register(request):
    if request.method == 'POST':
        uf = UserForm(request.POST)
        if uf.is_valid():
            #获取表单元素
            username = uf.cleaned_data['username']
            password = uf.cleaned_data['password']
            email = uf.cleaned_data['email']
            #将表单写入数据库
            user = User()
            user.username = username
            user.password = password
            user.email = email
            user.save()
            #返回注册成功页面
            return render_to_response('success.html',{'username':username})
    else:
        uf = UserForm()
    return render_to_response('register.html',{'uf':uf})

上面这个逻辑主要做了几件事,首先提供给用户一个注册页面(register.html),UserForm类定义了表单在注册页面上的显示。接受用户填写的表单信息,然后将表单信息写入到数据库,最后返回给用户一个注册成功的页面(success.html)

4.创建注册页面

在逻辑层提到了两个页面,一个注册页面(register.html),一个注册成功页面(success.html)。所以我们要把这两个页面创建出来。

先在register\app\目录下创建templates目录,接着在register\app\templates目录下创建register.html 文件:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>用户注册</title>
    <style>
        body{color:#efd;background:#453;padding:0 5em;margin:0}
        h1{padding:2em 1em;background:#675}
        h2{color:#bf8;border-top:1px dotted #fff;margin-top:2em}
        p{margin:1em 0}
    </style>
</head>
<body>
    <h1>注册页面:</h1>
    <form method = 'post' enctype="multipart/form-data">
        {% csrf_token %}
        {{uf.as_p}}
        <input type="submit" value = "ok" />
    </form>
</body>
</html>

在register/app/templates/目录下创建success.html 文件:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>注册成功</title>
</head>
<body>
    <h1>恭喜{{username}},注册成功!</h1>
</body>
</html>

设置模板路径:

打开register\register\settings.py文件,添加内容关于DIRS:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR,'templates').replace('\\', '/'),],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

5.设置url

打开register\register\urls.py文件,添加如下内容:

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

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

在register\app目录下创建urls.py文件:

from django.urls import path
from app import views

urlpatterns = [
    #http://127.0.0.1:8000/account/ 这两个url指向都是注册页面
    path('', views.register, name='register'),
    path('register/',views.register,name = 'register'),
]

6.访问注册页面

当前面的工作都做完之后,我们启动服务器

(django2.0) F:\益达学习\django\django2.0项目\register>python manage.py runserver
Performing system checks...

System check identified no issues (0 silenced).
May 15, 2018 - 13:00:00
Django version 2.0.4, using settings 'register.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.

为了避免之前的错误再次出现

接着打开register\register\settings.py文件,将下面一行代码注释:

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    # 'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

访问http://127.0.0.1:8000/app/register/

打开注册页面

注册成功出现的页面:

这里写图片描述

7.如何查看注册用户的信息呢?

我们可以利用django自带的后台系统admin

打开register\app\models.py文件:

from django.db import models
from django.contrib import admin
# Create your models here.
class User(models.Model):
    username = models.CharField(max_length = 50)
    password = models.CharField(max_length = 50)
    email = models.EmailField()

    def __str__(self):
        return self.username

class UserAdmin(admin.ModelAdmin):
    list_display = ('username','email')
#修饰器
admin.site.register(User,UserAdmin)

需要重新执行分别执行下面两条代码

python manage.py makemigrations

python manage.py migrate

8.创建超级管理员

ps.如果忘记了的话,可以重新创建超级管理员

邮件地址可以不填

(django2.0) F:\益达学习\django\django2.0项目\register>python manage.py createsuperuser
Username (leave blank to use 'asus-pc'): root
Error: That username is already taken.
Username (leave blank to use 'asus-pc'): xyyojl
Email address:
Password:
Password (again):
Superuser created successfully.

登陆admin 后台

http://127.0.0.1:8000/admin/

这里写图片描述
参考资料:虫师的django快速实现登录

猜你喜欢

转载自blog.csdn.net/xyyojl/article/details/80357923