一.django开发步骤(参考教程https://docs.djangoproject.com/zh-hans/2.2/):如下:
1.安装django :pip install Django 查看django版本:python -m django --version
2.创建项目:django-admin startproject mysite 启动项目:python manage.py runserve 创建子项目:python manage.py startapp polls(下一步是要在根 URLconf 文件中指定我们创建的 polls.urls
模块。在 mysite/urls.py
文件的 urlpatterns
列表里插入一个 include()
)
from django.contrib import admin
from django.urls import path,include
urlpatterns = [
path('polls/', include('polls.urls')),
path('admin/', admin.site.urls),
]
3、将App配置到Setting文件当中去(为了在我们的工程中包含这个应用,我们需要在配置类 INSTALLED_APPS
中添加设置。因为 PollsConfig
类写在文件 polls/apps.py
中,所以它的点式路径是 'polls.apps.PollsConfig'
。在文件 mysite/settings.py
中 INSTALLED_APPS
子项添加点式路径后)
INSTALLED_APPS = [
'polls.apps.PollsConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
4、打开app的文件下的model.py文件,编写model,这里主要是编写web所需要的数据表
from django.db import models
from django.utils import timezone
import datetime
class Question(models.Model):
def __str__(self):
return self.question_text
def was_published_recently(self):
return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
class Choice(models.Model):
def __str__(self):
return self.choice_text
question = models.ForeignKey(Question, on_delete=models.CASCADE)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
5、将数据导入到数据库当中去:python manage.py makemigrations XXX(python manage.py makemigrations polls
)
6、同步数据库:python manage.py migrate
7、打开admin.py文件,注册数据库,这里是将model注册到后台当中,以便用后台来对数据进行增删改
8、创建模板:在项目目录下创建templates文件夹,在文件夹下创建XXX.html模板文件
二.django整合mysql
设置setitng:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'python',
'USER': 'root',
'PASSWORD': '123456',
'HOST': '127.0.0.1',
'PORT': '3306',
}
}
主要涉及文件
views.py:
# _*_ coding: utf-8 _*_
from django.db import transaction
from django.http import HttpResponseRedirect,JsonResponse,HttpResponse
from django.shortcuts import get_object_or_404, render,render_to_response
from django.urls import reverse
from django.views import generic
from django.views.decorators.csrf import csrf_exempt
from .models import Choice, Question
import json
from django.core import serializers
import time
from django.db import connection
class IndexView(generic.ListView):
template_name = 'polls/index.html'
context_object_name = 'latest_question_list'
def get_queryset(self):
"""Return the last five published questions."""
return Question.objects.order_by('-pub_date')[:5]
class DetailView(generic.DetailView):
model = Question
template_name = 'polls/detail.html'
class ResultsView(generic.DetailView):
model = Question
template_name = 'polls/results.html'
def vote(request, question_id):
question = get_object_or_404(Question, pk=question_id)
print(question_id)
try:
selected_choice = question.choice_set.get(pk=request.POST['choice'])
except (KeyError, Choice.DoesNotExist):
# Redisplay the question voting form.
return render(request, 'polls/detail.html', {
'question': question,
'error_message': "You didn't select a choice.",
})
else:
selected_choice.votes += 1
selected_choice.save()
# Always return an HttpResponseRedirect after successfully dealing
# with POST data. This prevents data from being posted twice if a
# user hits the Back button.
return HttpResponseRedirect(reverse('polls:results', args=(question.id,)))
@csrf_exempt
def test_api(request):
q = Question.objects.all()
data={}
data['list'] = json.loads(serializers.serialize("json", q))
return JsonResponse(data, safe=False)
def add(request):
t=time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
print(t)
a=Question(question_text="3",pub_date=t)
a.save()
# print("3") # 打印 参数具体树枝
return HttpResponse('增加第{}数据成功')
@csrf_exempt
#@transaction.atomic
def addPost(request):
try:
with transaction.atomic():
if request.method == 'POST':
p = json.loads(request.body)
a = p.get("question_text")
b = p.get("pub_date")
qu = Question(question_text=str(a), pub_date=str(b))
qu.save()
Question.objects.extra("select * from polls_question")
return HttpResponse('abc')
else:
return HttpResponse('abc')
except Exception as e:
return HttpResponse("出现错误<%s>" % str(e))
def Login(request):
if request.method=="POST":
a=request.POST.get("question_text")
print(a)
return JsonResponse({"name":"3"}, safe=False)
else:
return JsonResponse({"name": "4"}, safe=False)
def select(request):
# cursor = connection.cursor()
# # cursor.execute("insert into book(id,name,author) values (null ,'三国演义','罗贯中')")
# cursor.execute("select * from polls_question")
# rows = cursor.fetchall()
# 惰性raw
# for p in Question.objects.raw("select * from polls_question"):
# print(p)
# 结果修改器 extra
try:
with transaction.atomic():
raw = Question.objects.extra(select={'count': 'select count(*) from polls_question'})
json_data = serializers.serialize("json", raw, ensure_ascii=False)
except Exception as e:
return HttpResponse("出现错误<%s>" % str(e))
return JsonResponse(json_data, safe=False)
# django 分页的使用
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
def listing(request):
contact_list = Question.objects.all()
paginator = Paginator(contact_list, 3) # Show 25 contacts per page
page = request.GET.get('page')
try:
contacts = paginator.page(page)
except PageNotAnInteger:
# If page is not an integer, deliver first page.
contacts = paginator.page(1)
except EmptyPage:
# If page is out of range (e.g. 9999), deliver last page of results.
contacts = paginator.page(paginator.num_pages)
json_data = serializers.serialize("json", contacts, ensure_ascii=False)
return JsonResponse(json_data, safe=False)
urls.py:
from django.urls import path
from . import views
app_name = 'polls'
urlpatterns = [
path('', views.IndexView.as_view(), name='index'),
path('<int:pk>/', views.DetailView.as_view(), name='detail'),
path('<int:pk>/results/', views.ResultsView.as_view(), name='results'),
path('<int:question_id>/vote/', views.vote, name='vote'),
path('test_api/', views.test_api, name='test_api'),
path('add/', views.add, name='add'),
path('addPost/', views.addPost, name='addPost'),
path('login/', views.Login,name='login'),
path('select/', views.select,name='select'),
path('listing/', views.listing,name='listing')
]
总结:本文使用的 django2.2 主要是向外部提供简单接口
资源链接:https://download.csdn.net/download/qingshu0400/11100011