1、项目总地址:https://github.com/xieyipeng/SSM
2、Django学习:https://github.com/xieyipeng/SSM/tree/master/Django_test
3、Django实战:https://github.com/xieyipeng/SSM/tree/master/LoginAndRegistration
4、Django与Android连接(服务端Django工程):https://github.com/xieyipeng/SSM/tree/master/qq
以下两个android工程的服务端基于链接4
5、Django与Android交互(Http请求 - android工程):https://github.com/xieyipeng/SSM/tree/master/demoHttp
6、基于Django(webSocket)实现在线聊天(android工程):https://github.com/xieyipeng/SSM/tree/master/SoketTest
7、javaBean基类(GetPostUtil):https://github.com/xieyipeng/Django/blob/master/MineIM/app/src/main/java/com/example/xieyipeng/mineim/tools/GetPostUtil.java
在线聊天
我是看官方文档(相信他讲的比我好Django + channels
):
中文版:http://www.likecs.com/show-22817.html
对下面发送图片请求的优化
一、Django
1、虚拟环境创建工程
- 注意venv这个虚拟环境目录,以及我们额外创建的templats目录
2、创建APP
- 检查环境:
pycharm下方terminal 输入:where python
和python -V
(venv) E:\SSM\LoginAndRegistration>where python
E:\SSM\LoginAndRegistration\venv\Scripts\python.exe
D:\python\python.exe
(venv) E:\SSM\LoginAndRegistration>python -V
Python 3.6.8
- 创建login这个app: terminal 输入:
python manage.py startapp login
3、设置时区、语言
- 项目settings文件中:
# Internationalization
# https://docs.djangoproject.com/en/1.11/topics/i18n/
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
改为:
# Internationalization
# https://docs.djangoproject.com/en/1.11/topics/i18n/
LANGUAGE_CODE = 'zh-hans' # 这里修改了
TIME_ZONE = 'Asia/Shanghai' # 这里修改了
USE_I18N = True
USE_L10N = True
USE_TZ = False # 这里修改了
4、启动开发服务器
- 在Pycharm的Run/Debug Configurations配置界面里,将HOST设置为127.0.0.1,Port保持原样的8000,确定后,运行。
5、设计数据模型
- 数据库模型设计(model)
- 设置数据库后端
# TODO: 连接数据库
import pymysql
pymysql.install_as_MySQLdb()
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'login',
'HOST': '127.0.0.1',
'USER': 'root',
'PASSWORD': '270030',
'PORT': '3306',
}
}
- 注册app
# Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'login',
]
- 创建记录和数据表
1、创建数据库 - login
2、修改E:\SSM\LoginAndRegistration\venv\Lib\site-packages\django\db\backends\mysql
目录下base.py
和operations.py
两个文件
base.py:注释掉两行
if version < (1, 3, 13):
raise ImproperlyConfigured('mysqlclient 1.3.13 or newer is required; you have %s.' % Database.__version__)
operations.py:修改decode为encode
def last_executed_query(self, cursor, sql, params):
# With MySQLdb, cursor objects have an (undocumented) "_executed"
# attribute where the exact query sent to the database is saved.
# See MySQLdb/cursors.py in the source distribution.
query = getattr(cursor, '_executed', None)
if query is not None:
query = query.encode(errors='replace')
return query
3、app中的models建立好了后,并不会自动地在数据库中生成相应的数据表,需要你手动创建。进入Pycharm的terminal终端,执行下面的命令:
python manage.py makemigrations
python manage.py migrate
4、创建管理员账户
python manage.py createsuperuser
二、与android虚拟机的链接
1、服务端设置:
基本配置就不重复说了。
- 1、settings中注释掉一行:(具体原因未知:正常在android虚拟机中发送get请求完全正确,但是发送post请求出现错误,具体原因貌似是什么csrf的检查,加密啥的,自己也不明白,只知道注释掉之后,post请求发送的数据可以显示在pycharm的terminal里面了)
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',
]
- 2、创建模型类[
../myApp/models.py
]:
class User(models.Model):
gender = (
('male', '男'),
('female', '女')
)
name = models.CharField(max_length=128)
sex = models.CharField(max_length=32, choices=gender, default='男')
c_time = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.name
class Meta:
ordering = ["-c_time"]
verbose_name = "用户"
verbose_name_plural = "用户"
- 3、设置路由[
../qq/qq/urls.py
]:
from django.contrib import admin
from django.urls import path
from login import views
urlpatterns = [
path('admin/', admin.site.urls),
path('get_test/', views.get_test), # 响应get文本请求
path('post_test/', views.post_test), # 响应post文本请求
path('post_file_test/', views.upload_file) # 响应get文件请求
]
- 4、逻辑[
../myApp/views.py
]:
import json
import os
from django.http import HttpResponse
from login.models import User
def get_test(request):
pass
def post_test(request):
pass
def upload_file(request):
pass
- 5、允许所有的地址访问[
../qq/settings.py
]
当然可以只限定几个已知的地址访问该服务器
ALLOWED_HOSTS =