感想:
自己在网上搜索的一些博客里面的django的文章,有一些不完整,或者django的版本还是低版本,需要自己去修改,对于web应用来说,包括数据库的创建,前端页面的开发,以及中间逻辑层的处理三部分。 其实这些基本上是套路,能够熟悉应用就好。
本操作环境:
虚拟环境:django2.0 python3.5(应该python3.6都可以使用) window10
创建项目: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'
打开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
在此之前要创建超级管理员,以便登录到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里面注册模型
①打开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,应该有一些提示功能比如是你输出的信息错误,请想想再输入之类的,后期继续完善。
在逻辑层提到了两个页面,一个登录页面(login.html),一个登录成功页面(success.html)。所以我们要把这两个页面创建出来。
先在login\app目录下创建templates目录,接着在login\app\templates目录下创建login.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 文件:
<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>
打开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'),
]
打开login/app/admin.py文件,注册模型,添加如下内容:
from django.contrib import admin
# Register your models here.
from app.models import User
admin.site.register(User)
当前面的工作都做完之后,我们启动服务器
(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快速实现文件上传