windows7
python 3.7
idea
pip install django
创建HelloWorld
在D:/HelloWorld 执行
django-admin startproject HelloWorld会在当前目录下生产HelloWorld项目
使用idea打开
在idea的Terminal 中执行(在CMD中执行卡在了Watching for file changes with StatReloader)
python manage.py runserver访问 http://127.0.0.1:8000/
设置下admin的账号密码
访问http://127.0.0.1:8000/admin
输入账号和密码
在HelloWorld的view.py中增加代码
from django.http import HttpResponse def hello(request): return HttpResponse('Hello World! django')在helloWorld中的urls中配置下
from django.contrib import admin from django.urls import path from . import view from django.conf.urls import url urlpatterns = [ path('admin/', admin.site.urls), url(r'^hello$', view.hello), ]url() 函数 Django url() 可以接收四个参数,分别是两个必选参数:regex、view 和两个可选参数:kwargs、name,接下来详细介绍这四个参数。
regex: 正则表达式,与之匹配的 URL 会执行对应的第二个参数 view。view: 用于执行与正则表达式匹配的 URL 请求。kwargs: 视图使用的字典类型的参数。name: 用来反向获取 URL。
访问 http://127.0.0.1:8000/hello
在manage.py同级目录下新建templates目录,新建hello.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> hello {{helloMap}} </body> </html>修改settings.py 中的TEMPLATES
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, "templates")], ''' }在helloworld的view.py中增加
from django.shortcuts import render def helloMap(request): context = {} context['helloMap'] = 'myHello Map' return render(request, 'hello.html', context)配置下urls.py
from django.contrib import admin from django.urls import path from HelloWorld.view import hello, helloMap from django.conf.urls import url urlpatterns = [ path('admin/', admin.site.urls), url(r'^hello$', hello), url('helloMap/', helloMap), ]访问http://127.0.0.1:8000/helloMap/
先安装下mysql
pip install mysqlclient
新建一个app
django-admin startapp AppTest
会生成一个AppTest项目
在settings.py中加入
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'AppTest', ]在settings中新增数据库连接信息
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'test', 'USER': 'root', 'PASSWORD': 'mysql', 'HOST': 'localhost', 'PORT': '3306' } }在AppTest的models.py中增加代码
from django.db import models # Create your models here. class Person(models.Model): name = models.CharField('名称', max_length=100) age = models.IntegerField('年龄') address = models.CharField('地址', max_length=300) id =models.IntegerField('编号', primary_key=True) def __unicode__(self): return self.id执行
python manage.py migrate python manage.py makemigrations AppTest python manage.py migrate AppTest注意: 可能报错
django.db.migrations.exceptions.MigrationSchemaMissing: Unable to create the django_migrations table ((1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(6) NOT NULL)' at line 1"))原因是mysql的版本过低, 请至少升级mysql的版本至5.6
全部执行完成之后,可以看到数据库中的表
在AppTest的admin.py中增加配置
from django.contrib import admin from AppTest.models import Person admin.site.register(Person)可以直接操作Person的数据库
操作一下网页版本
appTest的models新增user
class User(models.Model): user = models.CharField('账号', max_length=16) pwd = models.CharField('密码', max_length=32) id = models.AutoField('编号', primary_key=True)在views里面新增
def add(request): from AppTest import models # 1 # u = models.User(user='shj') # u.save() # 2 # models.User.objects.create(user='sss',pwd='123456') dic = {'user':'wkk','pwd':'wkk'} models.User.objects.create(**dic) return HttpResponse('增加成功')查询
def select(request): from AppTest import models user_list = models.User.objects.all() return render(request, 'user.html', {'user_list': user_list})templates/user.html
<!-- ~ Copyright (C) 2020 Baidu, Inc. All Rights Reserved. --> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <table border="1"> <thead> <tr> <td>账号</td> <td>密码</td> </tr> </thead> <tbody> {% for user in user_list%} <tr> <td>{{user.user}}</td> <td>{{user.pwd}}</td> </tr> {% endfor%} </tbody> </table> </body> </html>配置urls
from django.contrib import admin from django.urls import path from HelloWorld.view import hello, index, helloMap from AppTest.views import add, select from django.conf.urls import url urlpatterns = [ path('admin/', admin.site.urls), url(r'^hello$', hello), url('helloMap/', helloMap), url('index/', index), url('appTest/add/', add), url('appTest/select/', select), ]
修改views.py,增加代码
from django.views.decorators.csrf import csrf_protect def home(request): return render(request, 'user.html') @csrf_protect def addHtml(request): from AppTest import models if request.method == 'POST': user = request.POST['user'] pwd = request.POST['pwd'] models.User.objects.create(user=user,pwd=pwd) user_list = models.User.objects.all() return render(request, 'user.html', {"user_list": user_list})修改urls.pu
urlpatterns = [ ''' url('appTest/home/', home), url('appTest/addHtml/', addHtml), ]修改user.tml
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="/appTest/addHtml/" method="post"> {% csrf_token %} 账号: <input type = 'text' name="user" /><br /> 密码: <input type = 'password' name="pwd" /><br /> <input type = 'submit' value="增加" /> </form> <table border="1"> <thead> <tr> <td>账号</td> <td>密码</td> </tr> </thead> <tbody> {% for user in user_list%} <tr> <td>{{user.user}}</td> <td>{{user.pwd}}</td> </tr> {% endfor%} </tbody> </table> </body> </html>注意: 1 form的action 路径结尾需要加上 '/', 否则可能报错
Exception Type: RuntimeError Exception Value: You called this URL via POST, but the URL doesn't end in a slash and you have APPEND_SLASH set. Django can't redirect to the slash URL while maintaining POST data. Change your form to point to 127.0.0.1:8000/appTest/addHtml/ (note the trailing slash), or set APPEND_SLASH=False in your Django settings.2 如果不加入csrf,则会报错
在浏览器中访问http://127.0.0.1:8000/appTest/home/
增加一条数据
models.py
from django.db import models class User(models.Model): user = models.CharField('账号', max_length=16) pwd = models.CharField('密码', max_length=32) id = models.AutoField('编号', primary_key=True)views.py
from django.shortcuts import render from django.http import HttpResponse from django.template.context import RequestContext from django.views.decorators.csrf import csrf_protect def home(request): return render(request, 'user.html') def add(request): from AppTest import models # 1 # u = models.User(user='shj') # u.save() # 2 # models.User.objects.create(user='sss',pwd='123456') dic = {'user':'wkk','pwd':'wkk'} models.User.objects.create(**dic) return HttpResponse('增加成功') @csrf_protect def addHtml(request): from AppTest import models if request.method == 'POST': user = request.POST['user'] pwd = request.POST['pwd'] models.User.objects.create(user=user,pwd=pwd) user_list = models.User.objects.all() return render(request, 'user.html', {"user_list": user_list}) # 1 # u = models.User(user='shj') # u.save() # 2 # models.User.objects.create(user='sss',pwd='123456') dic = {'user':'wkk','pwd':'wkk'} models.User.objects.create(**dic) return HttpResponse('增加成功') def updateHtml(request): from AppTest import models if request.method == 'POST': id = request.POST['id'] user = request.POST['user'] pwd = request.POST['pwd'] models.User.objects.filter(id=id).update(user=user, pwd=pwd) user_list = models.User.objects.all() return render(request, 'user.html', {"user_list": user_list}) def select(request): from AppTest import models user_list = models.User.objects.all() return render(request, 'user.html', {'user_list': user_list}) def deleteHtml(request): from AppTest import models if request.method == 'GET': id = request.GET['id'] models.User.objects.filter(id=id).delete() user_list = models.User.objects.all() return render(request, 'user.html', {"user_list": user_list})urls.py
from django.contrib import admin from django.urls import path from HelloWorld.view import hello, index, helloMap from AppTest.views import add, select, addHtml, home, deleteHtml, updateHtml from django.conf.urls import url urlpatterns = [ path('admin/', admin.site.urls), url(r'^hello$', hello), url('helloMap/', helloMap), url('index/', index), url('appTest/home/', home), url('appTest/add/', add), url('appTest/addHtml/', addHtml), url('appTest/deleteHtml/', deleteHtml), url('appTest/updateHtml/', updateHtml), url('appTest/select/', select), ]
一个完整的增删改查页面
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="/appTest/addHtml/" method="post"> {% csrf_token %} 账号: <input type = 'text' name="user" /><br /> 密码: <input type = 'password' name="pwd" /><br /> <input type = 'submit' value="增加" /> </form> <table border="1" style={margin-top: 20px}> <thead> <tr> <td>编号</td> <td>账号</td> <td>密码</td> <td>操作</td> </tr> </thead> <tbody> {% for user in user_list%} <tr> <td>{{user.id}}</td> <td>{{user.user}}</td> <td>{{user.pwd}}</td> <td> <a href="/appTest/deleteHtml/?id={{user.id}}" >删除</a> <form action="/appTest/updateHtml/" method="post"> {% csrf_token %} <input type = 'hidden' value={{user.id}} name="id" /><br /> 账号: <input type = 'text' name="user" /><br /> 密码: <input type = 'password' name="pwd" /><br /> <input type = 'submit' value="修改" /> </form> </td> </tr> {% endfor%} </tbody> </table> </body> </html>