本文通过pycharm和流行的python web开发框架jdango以及python3.6实现创建web工程并且实现简单登陆的功能。
Pycharm下载不再细说,python下载也不再说,jdango为pycharm已经集成的一个目前比较流行的一个web开发框架。
一、创建jdango开发服务器 和应用
file---> New Project
填写项目名称,然后点击create
图中编号1处为项目位置;编号2处为使用的模板语言类型,默认为Django模板语言;编号3处是保存项目页面HTML的文件夹名称,默认为templates;编号4处是应用名,一般根据Web应用的实际功能来命名。
本示例中,我们项目位置为D:\pycharmWorkplace\djangoDemo,应用名为firstApp。
设置填写完毕后,点击右下角的Create,创建项目。
创建好的项目结构如下:
可以看到,在项目根目录下,有三个文件夹:djangoDemo, templates和firstApp,以及一个python脚本文件manage.py.
firstApp是我们创建的应用相关要素的文件夹,djangoDemo是我们整个Django项目相关元素的文件夹。也就是说,对于一个Django项目,与项目名相同的文件夹只能有一个,应用对应的文件夹则可以有多个。templates文件夹用来保存HTML模板。
manage.py 是系统自动生成的Django项目管理程序,Django项目创建和运行所需要的所有命令都能由这个脚本提供。如为项目创建数据库的makemigrations 和 migrate, 启动服务器的runserver等。在编程过程中,manage.py一般是不需要修改的。
firstApp和 djangoDemo所包含的内容大致相同。
firstApp中,编程中常用的是migration文件夹、models.py和views.py。
views.py 是Web应用后台的核心,定义了后台具体的响应动作和数据存取、操作动作的函数;
models.py 是Web应用数据库的定义文件,以Python类的形式定义数据库中的各个表;
migration文件夹 保存着models中的数据库表迁移之后的文件,一般不需要手工操作。
除了firstApp中已有的文件之外,一般还需要新建一个urls.py文件,用来指定应用中出现的url所对应的响应函数。
djangoDemo中,常用的文件是setting.py 和 urls.py。 前者是项目的一些属性设置,如数据库连接、debug的方式等;后者同样是url映射关系。
二、配置web运行参数(数据库等)
2.1 安装Mysqldb库(需要联网)
我在这里使用的是MySQL数据库,因此我需要安装MySQL模块,相同的,如果你想要使用自己的数据库,比如Oracle,Db2等等,你需要手动安装对应的数r据库模块.
在命令窗口下运行如下命令pip install pymysql
稍等片刻,即可安装成功
2.2配置数据库连接
打开djangoDemo文件夹下的setting.py文件,敲入数据库连接信息
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',#//数据库的类型
'NAME': 'mytest', #所使用的的数据库的名字
'USER': 'root', #数据库服务器的用户
'PASSWORD': '611411', #密码
'HOST': '127.0.0.1', #主机
'PORT': '3306' #端口
}
}
2.3 注册应用
在上面打开的setting.py中,编辑下图中的信息,将firstApp这个应用注册进来(没有属性就添加,有就编辑)
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'firstApp', #自己的应用注册进来
]
2.3 编写实体类
打开下图中的models.py文件,写一个user类
from django.db import models
# Create your models here.
class User(models.Model):
username = models.CharField(max_length=50)
password = models.CharField(max_length=50)
def __unicode__(self):
return self.username
2.4 引入pymysql库
打开下图中的__init__.py文件,引入pymysql库
import pymysql
pymysql.install_as_MySQLdb()
2.5通过命令把实体类生成对应的Mysql表
通过命令行进入到你创建的应用根目录下,我的目录为D:\pycharmWorkplace\djangoDemo,在此目录下运行如下命令,即可将实体类生成对应的表(由于django有默认的一些表结构,因此本命令只是修改里面某些表字段的列名)
此命令为这些修改创建迁移文件python manage.py makemigrations
将这些改变更新到数据库中python manage.py migrate
生成后的mysql数据库的表结构如下:
当然,你还可以使用命令创建一个管理员账户,这个不是必须进行的python manage.py createsuperuser
三、开始开发应用
3.1 配置Url
打开如下图的urls.py文件,并编辑器内容为:
from django.conf.urls import url,include
from django.contrib import admin
from firstApp import views
urlpatterns = [
# Examples:
# url(r'^$', 'mysite5.views.home', name='home'),
url(r'^online/', include('firstApp.urls')),
]
在firstApp中创建urls.py文件并填写如下内容
from django.conf.urls import url,include
from django.contrib import admin
from firstApp import views
urlpatterns = [
url(r'^$', views.login, name='login'),
url(r'^login/$',views.login,name = 'login'),
url(r'^regist/$',views.regist,name = 'regist'),
url(r'^index/$',views.index,name = 'index'),
url(r'^logout/$',views.logout,name = 'logout'),
]
3.2 创建视图
打开下图中的views.py文件,编辑成如下内容from django.shortcuts import render
# Create your views here.
#coding=utf-8
from django.shortcuts import render,render_to_response
from django.http import HttpResponse,HttpResponseRedirect
from django.template import RequestContext
from django import forms
from firstApp.models import User
#表单
class UserForm(forms.Form):
username = forms.CharField(label='用户名',max_length=100)
password = forms.CharField(label='密码',widget=forms.PasswordInput())
#注册
def regist(req):
if req.method == 'POST':
uf = UserForm(req.POST)
if uf.is_valid():
#获得表单数据
username = uf.cleaned_data['username']
password = uf.cleaned_data['password']
#添加到数据库
User.objects.create(username= username,password=password)
return HttpResponse('regist success!!')
else:
uf = UserForm()
return render_to_response('regist.html',{'uf':uf}, )
#登陆
def login(req):
if req.method == 'POST':
uf = UserForm(req.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:
#比较成功,跳转index
response = HttpResponseRedirect('/online/index/')
#将username写入浏览器cookie,失效时间为3600
response.set_cookie('username',username,3600)
return response
else:
#比较失败,还在login
return HttpResponseRedirect('/online/login/')
else:
uf = UserForm()
return render_to_response('login.html',{'uf':uf},)
#登陆成功
def index(req):
username = req.COOKIES.get('username','')
return render_to_response('index.html' ,{'username':username})
#退出
def logout(req):
response = HttpResponse('logout !!')
#清理cookie里保存username
response.delete_cookie('username')
return response
这里实现了所有注册,登陆逻辑,中间用到cookie创建,读取,删除操作等。
3.3 创建html页面
在下图中的templates文件夹中创建regist.html文件
html>
注册页面:
{% csrf_token %}
{{uf.as_p}}
登陆
在templates文件夹中创建login.html 文件html>
登陆登陆页面:
{% csrf_token %}
{{uf.as_p}}
注册
在templates/目录下创建index.html 文件html>
Titlewelcome {{username}} !
退出
3.34 添加模块路径
打开setting.py文件
STATICFILES_DIRS = (
os.path.join(BASE_DIR,'firstApp/templates'),
)
自此,开发完成
四、运行
4.1 注册:
注册成功,提示“regist success!!”
4.2 登陆
执行登陆操作,通过读取浏览器cookie 来获取用户名
登录成功