(Django服务器+mySQL数据库+nginx反向代理+redis+channels+android客户端)数据交互及在线聊天

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

Django 教程-刘江的博客

1、虚拟环境创建工程

  • 注意venv这个虚拟环境目录,以及我们额外创建的templats目录

2、创建APP

  • 检查环境:
    pycharm下方terminal 输入:where pythonpython -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.pyoperations.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 =
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值