django2.0 快速实现登录

django2.0 快速实现登录

感想:

自己在网上搜索的一些博客里面的django的文章,有一些不完整,或者django的版本还是低版本,需要自己去修改,对于web应用来说,包括数据库的创建,前端页面的开发,以及中间逻辑层的处理三部分。 其实这些基本上是套路,能够熟悉应用就好。

本操作环境:

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

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

创建项目:django-admin startproject login

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

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

python manage.py startapp app

操作顺序如下,workon django2.0,—->这个相当于开启虚拟环境(django2.0是虚拟环境的名称,自己随便定),启动虚拟环境之后,命令行提示符左边会有你使用的虚拟环境的名称出现

ps.如果自己的电脑上没装过django,最好直接安装最新版的,因为本文章是关于django2.0+python3.5的,当然也可以使用虚拟环境,网上都有这样的文章,之后我会写一篇使实用的虚拟环境的文章

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

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

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

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

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

打开login\login\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',      #注意后面那个分号记得打上去
]

#注释csrf,以防再次出现403的错误 

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',
]

#设置为中文格式,使后台系统使用中文展示,和修改时间,这个看个人,有需要就修改
#设置编码、时区,不要使用zh-cn,这个不能用了
LANGUAGE_CODE = 'zh-hans'

TIME_ZONE = 'Asia/Shanghai'

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

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

from django.db import models

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

创建两个字段,用户存放用户名、密码等。

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

python manage.py makemigrations

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

python manage.py migrate

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

(django2.0) F:\益达学习\django\django2.0项目\login>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.启动服务器,查看有没有错误出现

在此之前要创建超级管理员,以便登录到admin后台管理系统

创建管理员的密码是有一定规则的,还有就是邮件地址可以不写

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

访问http://127.0.0.1:8000/,看到django2.0的主页

这里写图片描述

访问admin

http://127.0.0.1:8000/admin/

登录用户名和密码是我刚才创建的管理员的用户和密码
这里写图片描述

进入到里面之后,只要默认的东西,因为我还没有在admin里面注册模型

这里写图片描述

3.创建视图(views.py)

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

from django.shortcuts import render,render_to_response
from django.http import HttpResponseRedirect
from django import forms
from app.models import User
# Create your views here.
#定义表单模型
class UserForm(forms.Form):
    username = forms.CharField(label = '用户名 :',max_length = 50)
    password = forms.CharField(label = '密码 :',widget = forms.PasswordInput())

#登录
def login(request):
    if request.method == 'POST':
        uf = UserForm(request.POST)
        if uf.is_valid():
            #获取表单用户密码
            username = uf.cleaned_data['username']
            password = uf.cleaned_data['password']
            #获取的表单数据与数据库进行比较
            user = User.objects.filter(username__exact = username,password__exact = password)
            if user:
                return render_to_response('success.html',{'username':username})
            else:
                return HttpResponseRedirect('/login/')
    else:
        uf = UserForm()  
    return render_to_response('login.html',{'uf':uf}) 

登录的核心是拿到用户填写的表单数据(用户名、密码)与数据库里面的User表中的字段进行比较,根据比较结果做出不同的反应,如果在数据库有这些信息的话,就成功跳转到success.html页面(比较简陋),如果失败的话,还停留在原来的login.html,应该有一些提示功能比如是你输出的信息错误,请想想再输入之类的,后期继续完善。

4.创建前端页面

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

先在login\app目录下创建templates目录,接着在login\app\templates目录下创建login.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{
            background-color: rgb(235, 239, 242);
            font-size: 16px;
        }
        .login{
            width: 340px;
            height: 280px;
            margin: 50px auto;
            border:1px solid rgb(203, 219,218);
        }
        .login form{
            width: 340px;
            background-color: rgb(254,254,254);
        }
        .login .forms{
            width: 300px;
            margin: 0 auto;
            padding:10px 0 20px 0;
        }
        .login label{
            display: inline-block;
            width: 300px;
            padding-bottom: 8px;
        }
        .login input{
            width: 300px;
            height: 35px;
            border:none;
            outline: none;
            border:1px solid rgb(203, 219,218);
            background-color: #fff; 
            font-size: 18px;
            text-indent: 6px;
            border-radius: 5px;
        }
        .btn{
            width: 340px;
            padding: 15px 0;
            border-top: 1px solid #ccc;
            background-color:rgb(240,245,248);
        }
        .btn div{
            overflow: hidden;
            width: 300px;
            margin: 0 auto;
        }
        .btn button{
            float:right;
            padding:8px 16px;
            background: rgb(157, 211, 239);
            border:1px solid #ccc;
            border-radius: 5px;
            color: #fff;
        }
        .btn a{
            float:left;
            padding: 5px 0;
            text-decoration: none;
            color:#ccc;
        }
    </style>
</head>
<body>
    <div class="login">
        <form action="" method="post"  enctype="multipart/form-data">
           <div class="forms">
                {% csrf_token %}
                {{uf.as_p}}
           </div>
            <div class="btn">
                <div>
                    <a href="#">忘记密码?</a>
                    <button type ='submit'>登录</button>
                </div>
            </div>
        </form>
    </div>
</body>
</html>

在login/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>欢迎{{username}}</title>
</head>
<body>
    <h1>恭喜{{username}},登录成功!</h1>
</body>
</html>

5.设置url

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

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

urlpatterns = [
    path('admin/', admin.site.urls),
    #http://127.0.0.1:8000/login/
    path('login/',include('app.urls')),
]

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

from django.urls import path
from app import views
#from . import views  这个也可以使用,跟上面那个一样的
urlpatterns = [
    path('', views.login,name = 'login'),
]

6.向admin注册User的模型

打开login/app/admin.py文件,注册模型,添加如下内容:

from django.contrib import admin

# Register your models here.
from app.models import User
admin.site.register(User)

7.访问注册页面

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

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

System check identified no issues (0 silenced).
May 18, 2018 - 19:10:47
Django version 2.0.4, using settings 'login.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.

访问http://127.0.0.1:8000/admin/

这里写图片描述

然后添加一个user,填写用户名和密码

这里写图片描述

访问http://127.0.0.1:8000/login/

使用上面增加的user的信息,登录

这里写图片描述

登录成功的页面时:

这里写图片描述
注意:上面这是简单的实现登录,并不是完整的,只是实现大体的的功能,希望多多体谅
参考资料:虫师的django快速实现文件上传

猜你喜欢

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